gpt4 book ai didi

c# - 为什么 DbFunctions 不能与 Linq to Entities 一起使用

转载 作者:行者123 更新时间:2023-11-30 20:36:29 26 4
gpt4 key购买 nike

var vals = (from r in result
group r by DbFunctions.TruncateTime(r.Created) into g
select new { count = g.Count(), date = g});

当我尝试运行上面的代码时,出现以下错误

Results 是数据库查询的结果

"This function can only be invoked from LINQ to Entities."

模型 (result) 返回日期(除其他事项外),我要做的就是按日期分组(创建)并计算出有多少它存在的时间。

Created 已经是 DateTime

我做错了什么?

最佳答案

DbFunctions 的目的类是将表达式转换为正确的 SQL 语法:

Provides common language runtime (CLR) methods that expose EDM canonical functions for use in DbContext or ObjectContext LINQ to Entities queries.

因为您不是在查询 SQL 源,所以没有理由使用 DbFunctions 方法。

等效的 Linq-to-object 查询是:

var vals = (from r in result
group r by r.Created.Date into g
select new { v = g.Count(), d = g});

The issue may be that Created is DateTime?

您可以使用条件运算符来说明这一点:

var vals = (from r in result
group r by r.Created.HasValue ? (DateTime?)r.Created.Value.Date
: (DateTime?)null
into g
select new { v = g.Count(), d = g});

或者只是

var vals = (from r in result
group r by r.Created.Value.Date into g
select new { v = g.Count(), d = g});

如果 Created 不可能为 null(或者如果它是 null 你想抛出异常)

关于c# - 为什么 DbFunctions 不能与 Linq to Entities 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36872505/

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