簡體   English   中英

實體框架5和SQL查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM