C#理解LINQ查询中的AsEnumerable

长椅

下面的代码:

var mids = _db.Members
     .GroupBy(m => new { m.MemberID, m.CreatedDate })
     .Where(m => m.All(s => s.Status == 1) && m.Key.CreatedDate.Date == DateTime.Today)
     .Select(m=>m);

我收到运行时错误:LINQ to Entities不支持指定的类型成员'Date'。仅支持初始化程序,实体成员和实体导航属性

当我将_db.Members.AsEnumerable()添加到第一行时,它将起作用。

我的理解是.AsEnumerable()强制查询在客户端执行。因此,在上面的代码中,AsEnumerable运算符将查询分为两部分,在服务器端进行选择,并在客户端进行休息(group by,where)。

有人可以验证我的理解是否正确吗?为什么没有.AsEnumerable()的代码失败?

乔恩

您的理解是正确的。调用AsEnumerable数据源后,将无法再查询它,并退回到简单的“给我一切”模式,这意味着所有数据都将传输到客户端,并且任何进一步的操作都在本地完成。

这也是查询无法按书面方式工作的原因:为了使其正常工作,您在LINQ方法中使用的所有表达式都必须可以翻译为数据源可以理解的任何语言-并且因为它是查询提供者的翻译责任,无论您编程支持什么内容,都将使您受其束缚。

在这种特定情况下(假设为EF),可以通过手动替换规范函数的属性访问来将查询固定为可查询模式TruncateTime

.Where(m => m.All(s => s.Status == 1) 
    && EntityFunctions.TruncateTime(m.Key.CreatedDate) ==
       EntityFunctions.TruncateTime(CurrentDateTime()))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在LINQ C#中深入过滤查询

来自分类Dev

在C#中查询XML Linq

来自分类Dev

包含“ AsEnumerable()”对等项的Linq查询

来自分类Dev

C#中的Linq查询中的枚举条件

来自分类Dev

使用C#的Linq查询

来自分类Dev

使用组和联接的C#中的LINQ查询

来自分类Dev

将Linq查询存储在列表C#中

来自分类Dev

使用组和联接的C#中的LINQ查询

来自分类Dev

理解C#中的方差

来自分类Dev

理解 C# 中的组合

来自分类Dev

使用linq到C#的C#中SQL查询的等效代码是什么?

来自分类Dev

优化 C# lambda 查询以访问 linq 查询中的第二个相关字段

来自分类Dev

Linq查询和C#转换

来自分类Dev

C#动态Linq查询多重或逻辑

来自分类Dev

从查询Postgresql转换为linq C#

来自分类Dev

查询数据范围 linq c#

来自分类Dev

C# 实体框架和 Linq 查询

来自分类Dev

C#中的LINQ:LINQ中的Foreach

来自分类Dev

C#中的LINQ:LINQ中的Foreach

来自分类Dev

优化LINQ查询调用Newbie C#/ LINQ问题

来自分类Dev

C#问题获取LINQ查询结果-查询在LINQpad中运行,但不在Visual Studio中运行

来自分类Dev

复杂的SQL Server查询到LINQ to SQL查询C#

来自分类Dev

在C#中优化Linq

来自分类Dev

如何在“按查询分组”中不使用linq的情况下调用C#方法

来自分类Dev

如何使用C#在标签或文本框中显示此linq查询?

来自分类Dev

在c#中此查询的LINQ解决方案是什么?

来自分类Dev

LINQ查询嵌套字典,在C#中具有多个键值选择

来自分类Dev

具有过滤器的C#中的MongoDB Linq查询

来自分类Dev

如何在C#中的动态列和动态属性上过滤LINQ查询?