EF 不包括 where 子句
本文关键字:子句 where 不包括 EF | 更新日期: 2023-09-27 18:36:22
我对EF有一个小问题。我正在对一个大表执行查询,这需要很长时间。我想我找到了原因,但找不到解决方案;
我的 LINQ 查询如下所示:
IEnumerable<string> o = (from P in Table where P.ITEMID == itemid && P.IMAGESIZE == size select P.PATH);
return o.Any() ? o.FirstOrDefault() : null;
我希望这会生成带有 where 子句的 SQL 查询,但它实际生成的是这样的:
SELECT
[Extent1].[ITEMID] AS [ITEMID],
[Extent1].........
snap 10 columns
FROM [dbo].[TABLE] AS [Extent1]
where 子句和选择(我尝试只选择一列)在枚举后执行。我希望它做的是生成一个带有 where 子句的 SQL 查询并只选择一列。
我做错了什么?
由于要创建IEnumerable<string>
类型的对象,EF 会在第一行运行此查询。然后在内存集中执行Any()
或FirstOrDefault()
。如果你想"继续"编写linq语句并最终运行查询;就和IQueryable<T>
一起去吧.
IQueryable<string> o = (from P in Table where P.ITEMID == itemid && P.IMAGESIZE == size select P.PATH);
return o.SingleOrDefault();
但正如瑞安·贝内特所建议的那样,它更容易使用;
return Table.Where(p => p.ITEMID == itemid && P.IMAGESIZE == size).SingleOrDefault().PATH;
return table.FirstOrDefault(P => P.ITEMID == itemid && P.IMAGESIZE == size);
我相信这就是你要实现的目标。这将在 SQL 中为您提供一个 where 子句,并立即带回记录或 null。