国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

擴展 Entity Framework支持復雜的過濾條件(多個關鍵字模糊匹配)

來源:懂視網 責編:小采 時間:2020-11-27 22:42:07
文檔

擴展 Entity Framework支持復雜的過濾條件(多個關鍵字模糊匹配)

擴展 Entity Framework支持復雜的過濾條件(多個關鍵字模糊匹配):之前遇到一個棘手的Linq to EF查詢的技術問題,現有產品表Product,需要根據多個關鍵字模糊匹配產品名稱, 現將解決方案分享出來。 問題描述 根據需求,我們需要編寫如下的SQL語句來查詢產品 代碼如下:select * from dbo.Product where
推薦度:
導讀擴展 Entity Framework支持復雜的過濾條件(多個關鍵字模糊匹配):之前遇到一個棘手的Linq to EF查詢的技術問題,現有產品表Product,需要根據多個關鍵字模糊匹配產品名稱, 現將解決方案分享出來。 問題描述 根據需求,我們需要編寫如下的SQL語句來查詢產品 代碼如下:select * from dbo.Product where

之前遇到一個棘手的Linq to EF查詢的技術問題,現有產品表Product,需要根據多個關鍵字模糊匹配產品名稱, 現將解決方案分享出來。

問題描述
根據需求,我們需要編寫如下的SQL語句來查詢產品
代碼如下:


select * from dbo.Product
where
(ProductName like 'Product1%' or
ProductName like 'Product2%')

如何將以上的SQL語句轉換成EF的寫法呢?
方案一
可以使用Union,將以上SQL語句轉換成以下的形式:
代碼如下:

select * from dbo.Product
where
ProductName like 'Product1%'
UNION
select * from DocutapCMS.dbo.Product
where
ProductName like 'Product2%'

然后將上路SQL換成Linq To EF就非常簡單了,再此就不貼出來了。但每個條件都要寫一個Query,工作量大。如果條件太多,生成的SQL語句也非常大,并且寫起來很費力。

方案二
我們從Linq To EF的Contains功能得到啟發,Linq To EF 會將Contains轉換成IN表達式。
那么我們可不可以直接寫Expression,將條件轉換成上述SQL語句呢?答案是肯定的。以下就是實現上述方案的具體Linq To EF擴展。
代碼如下:


public static Expression<Func<TElement, bool>> BuildContainsExpression<TElement, TValue>(Expression<Func<TElement, TValue>> valueSelector,
  IEnumerable<TValue> values)
{
  var startsWithMethod = typeof (string).GetMethod("StartsWith", new[] { typeof(string) });
  var startWiths = values.Select(value => (Expression)Expression.Call(valueSelector.Body, startsWithMethod, Expression.Constant(value, typeof(TValue))));
  var body = startWiths.Aggregate<Expression>(((accumulate, equal) => Expression.Or(accumulate, equal)));
  var p = Expression.Parameter(typeof(TElement));
  return Expression.Lambda<Func<TElement, bool>>(body, p);
}

用法:
代碼如下:

private static void QueryProducts(IQueryable<Product> query)
{
var productNames = new string[] {"P1", "P2"};
var query1 = from a in query.Where(BuildContainsExpression<Product, string>(d=>d.ProductName, productNames))
select a;
var items2 = query1.ToList();
}
private static void QueryProducts(IQueryable<Product> query)
{
var productNames = new string[] {"P1", "P2"};
var query1 = from a in query.Where(BuildContainsExpression<Product, string>(d=>d.ProductName, productNames))
select a;
var items2 = query1.ToList();
}

創建擴展方法,讓調用變得簡單
代碼如下:

public static IQueryable<TElement> WhereOrLike<TElement, TValue>(this IQueryable<TElement> query,
  Expression<Func<TElement, TValue>> valueSelector, IEnumerable<TValue> values)
{
return query.Where(BuildContainsExpression<TElement, TValue>(valueSelector, values));
}
private static void QueryProducts2(IQueryable<Product> query)
{
var productNames = new string[] {"P1", "P2"};
query.WhereOrLike(d=>d.ProductName, productNames).ToList();
}

通過SQL Profile 監視生成的SQL語句
代碼如下:

-- Region Parameters
DECLARE @p0 NVarChar(3) = 'P1%'
DECLARE @p1 NVarChar(3) = 'P2%'
-- EndRegion
SELECT [t0].[Id], [t0].[ProductName]
FROM [Product] AS [t0]
WHERE ([t0].[ProductName] LIKE @p0) OR ([t0].[ProductName] LIKE @p1)

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

擴展 Entity Framework支持復雜的過濾條件(多個關鍵字模糊匹配)

擴展 Entity Framework支持復雜的過濾條件(多個關鍵字模糊匹配):之前遇到一個棘手的Linq to EF查詢的技術問題,現有產品表Product,需要根據多個關鍵字模糊匹配產品名稱, 現將解決方案分享出來。 問題描述 根據需求,我們需要編寫如下的SQL語句來查詢產品 代碼如下:select * from dbo.Product where
推薦度:
標簽: 擴展 多條件 entity
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 国产成人精品一区二区视频 | 亚洲欧美日韩在线一区 | 日韩欧美在线观看视频 | 成人国产精品一级毛片视频 | 欧美高清在线不卡免费观看 | 看一级特黄a大片日本片 | 亚洲欧洲日韩在线 | 成人无码一区二区片 | 插插插叉叉叉 | 欧美一区二区免费 | 91热国产 | 成人免费视频一区二区 | 亚洲欧洲国产成人综合一本 | 国产精品久久成人影院 | 日韩欧美亚洲国产高清在线 | 欧美综合在线观看 | 欧美在线视频网 | 久久久精品麻豆 | 亚洲最新视频 | 国产第一页视频 | 91字幕网 | 大陆日韩欧美 | 欧美大色 | 91在线观 | 亚洲国产成人久久综合野外 | 日韩欧美在线电影 | 青草视频在线观看免费 | 日韩欧美视频一区二区三区 | 国产成人久久一区二区三区 | 国产成人精品一区二区 | 亚洲天堂一区二区三区 | 亚洲三级电影网 | 伊人色综合一区二区三区 | 久久久国产一区二区三区 | 日韩有码在线播放 | 国产欧美在线观看一区二区 | 欧美一区二区三区视频在线 | 国产爱搞| 国产 欧美 在线 | 精品一区二区久久久久久久网精 | 亚洲视频在线播放 |