[英]Entity Framework 5 and SQL Queries
我面臨嚴重的性能問題...我的查詢應該直接在數據庫中過濾帶有SQL的產品。 當我執行此代碼時,它沒有,它返回所有產品並在C#中過濾它們。
MyContext context = new MyContext();
Func<Product, bool> query = (p => p.UPC.StartsWith("817"));
var products = context.Products.Where(query).Take(10);
我注意到products變量是TakeIterator類型。 當我稍微更改代碼時,我得到了過濾確定,但它迫使我將查詢邏輯直接放在同一個方法中,這是我想要避免的。
MyContext context = new MyContext();
var products = context.Products.Where(p => p.UPC.StartsWith("817")).Take(10);
第二個版本是Visual Studio調試器的未公開類型,但它顯示為我試圖結束的查詢,這很好!
{SELECT TOP (10)
[Extent1].[Id] AS [Id],
[Extent1].[Brand] AS [Brand],
[Extent1].[Description] AS [Description],
[Extent1].[UPC] AS [UPC]
FROM [dbo].[Products] AS [Extent1]
WHERE [Extent1].[UPC] LIKE N'817%'}
我需要弄清楚如何將Func作為參數傳遞,並以與第一個C#代碼摘錄相同的方式執行查詢,但優化第二個。
試試這個:
MyContext context = new MyContext();
Expression<Func<Product, bool>> query = (p => p.UPC.StartsWith("817"));
var products = context.Products.Where(query).Take(10);
並查看此問題以供參考:
為什么要使用Expression <Func <T >>而不是Func <T>?
接受的答案是如此完整,以至於我不敢嘗試更好地解釋它!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.