EF多條件查詢擴充套件

2021-08-18 16:02:15 字數 3529 閱讀 3381

/// /// 帶分頁的查詢   

///

///

/// 頁碼

/// 頁容量

/// 條件 lambda表示式

/// 排序 lambda表示式

///

iqueryablegetpagedlist(int pageindex, int pagesize, expression> wherelambda, expression> orderbylambda, bool isasc = true);

前言假設:在前端頁面,我們一般會遇到多條件查詢,但是我們看到帶分頁的查詢都有乙個expression> wherelambda ,為了支援多條件查詢,我們只能多這個expression> wherelambda 進行擴充套件,讓她可以進行多條件的查詢

using system.collections.generic;

using system.linq;

using system.linq.expressions;

namespace system

/// /// 建立乙個值恒為 false 的表示式。

///

/// 表示式方法型別

/// 乙個值恒為 false 的表示式。

public static expression> false()

/// /// 使用 expression.orelse 的方式拼接兩個 system.linq.expression。

///

/// 表示式方法型別

/// 左邊的 system.linq.expression 。

/// 右邊的 system.linq.expression。

/// 拼接完成的 system.linq.expression。

public static expressionor(this expressionleft, expressionright)

/// /// 使用 expression.andalso 的方式拼接兩個 system.linq.expression。

///

/// 表示式方法型別

/// 左邊的 system.linq.expression 。

/// 右邊的 system.linq.expression。

/// 拼接完成的 system.linq.expression。

public static expressionand(this expressionleft, expressionright)

/// /// 使用自定義的方式拼接兩個 system.linq.expression。

///

/// 表示式方法型別

/// 左邊的 system.linq.expression 。

/// 右邊的 system.linq.expression。

///

/// 拼接完成的 system.linq.expression。

private static expressionmakebinary(this expressionleft, expressionright, funcfunc)

/// /// 拼接兩個 /// system.linq.expression

/// ,兩個 /// system.linq.expression

/// 的引數必須完全相同。

///

/// 左邊的 /// system.linq.expression

///

/// 右邊的 /// system.linq.expression

///

/// 表示式拼接的具體邏輯

/// 拼接完成的 /// system.linq.expression

///

private static lambdaexpression makebinary(this lambdaexpression left, lambdaexpression right, funcfunc)

/// ///

///

///

///

///

///

private static ienumerable> combinate(ienumerableleft, ienumerableright)

}#region class: parameterreplace

internal sealed class parameterreplace : expressionvisitor

private readonly dictionary_parameters;

public parameterreplace(ienumerable> paramlist)

protected override expression visitparameter(parameterexpression p)

#region class: parameterequality

private class parameterequality : iequalitycomparer

public int gethashcode(parameterexpression obj)

}#endregion

}#endregion

}

/// /// 選單

///

public class menucontroller : basecontroller

//ioc屬性注入

/// /// 選單列表分頁查詢

///

/// 當前頁

/// 選單名稱

/// 選單級別

//條件查詢二

if (menulevel > 0)

//呼叫分頁中的方法

var data = menu.getpagedlist(pageindex, pagesize, filter, r => r.sort).tolist();

var result = new ;

return success(result);

}}

select * from user where age=25 and name like '%張%' or name like '%李%'

//想生成如下帶括號的語句就宣告兩個filter,姓名的全部or,完了再和另外乙個and

select * from user where age=25 and (name like '%張%' or name like '%李%')

if (!string.isnullorempty(model.tagnames))

filter = filter.and(filterb);

}

用EF實現多條件查詢

基本思想 首先將資料全部查出來,然後根據搜尋條件去除資料 例項 將資料庫全部資料查出 var temp db.knowledge.asnotracking where u true 是否包含查詢模組 if string.isnullorempty moduleid decimal moduid co...

多條件查詢

思路 1.獲取引數值 2.生成查詢條件 3.獲取查詢結果 4.繫結查詢選項 呼叫geturlhtml方法生成查詢url 例如 var y2013 pnvshihufu qbeijing sxuhuiqu 得到url變數值 protected string geturlval string name ...

多條件查詢

多條件查詢時在做專案的時候不可缺少的功能,雖然很簡單,但是自己還是記一下,對自己有用 查詢事件 private void button查詢 click object sender,eventargs e initial catalog uid pwd this.dataserver,this.dat...