gpt4 book ai didi

c# - Entity Framework 5 和 SQL 查询

转载 作者:太空狗 更新时间:2023-10-29 23:46:30 26 4
gpt4 key购买 nike

我面临严重的性能问题...我的查询应该直接在数据库中使用 SQL 过滤产品。当我执行这段代码时,它没有,它返回所有产品并在 C# 中过滤它们。

MyContext context = new MyContext();

Func<Product, bool> query = (p => p.UPC.StartsWith("817"));

var products = context.Products.Where(query).Take(10);

我注意到产品变量的类型是 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);

并查看此问题以了解原因:

Why would you use Expression<Func<T>> rather than Func<T>?

那里接受的答案太完整了,我不敢尝试更好地解释它!

关于c# - Entity Framework 5 和 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16678757/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com