做.Net開發的肯定都知道.Net Sql語句有個SqlParameter 一般用來做過濾判斷邏輯寫,那么到了EF 了還有這樣的寫法嘛?答案肯定是有的了,這里我只是把最粗糙和簡單的寫法羅列一些,具體封裝方法什么,有興趣的小伙伴們可以自己去做:
我這里有個Tb_NewsInfo_View Model實體首先需要帶條件過濾 廢話就不多說了的
//參數類型轉換
var parameter = Expression.Parameter(typeof(Tb_NewsInfo_View))
var type = typeof(Tb_NewsInfo_View);
Expression expr = Expression.Constant(true);
//這個類似於like用的是Contains包含方法代替
var methodtype = typeof(string).GetMethod("Contains", new Type[] { typeof(string) });
if (!string.IsNullOrWhiteSpace(newsTitle)) { expr = Expression.And(expr, Expression.Call(Expression.Property(parameter, "Tb_NewsTitle"), methodtype, Expression.Constant(newsTitle))); } if (!string.IsNullOrWhiteSpace(startdate.ToString())) { expr = Expression.And(expr, Expression.GreaterThanOrEqual( Expression.Property(parameter, "Tb_CreateDate"), Expression.Constant(startdate,typeof(DateTime?) ))); } if (!string.IsNullOrWhiteSpace(enddate.ToString())) { expr = Expression.And(expr, Expression.LessThanOrEqual( Expression.Property(parameter, "Tb_CreateDate"), Expression.Constant(enddate, typeof(DateTime?) ))); }
//這里參數傳入了就拼接對應條件
//最后帶入查詢方法
var lambda = Expression.Lambda<Func<Tb_NewsInfo_View, bool>>(expr, parameter); result = EF_Res_View.GetPageEntities(pageNo, pageSize,lambda, m => m.Tb_NewId, isAsc, out count).ToList();
過濾拼接EF Where 條件就是這么簡單
本人原網址:http://www.wuhannews.net/news/10304.html