聚合 LINQ 查询中的实体框架对象限制

2023-12-04

我有一个相当复杂的查询,我想返回一些特定的类型。主要涉及日期/时间计算或字符串值,当我尝试除 System.DateTime 类型之外的任何内容时,实体框架似乎在吐槽:

指定的类型成员“日期”是 LINQ to Entities 不支持。 仅初始值设定项、实体成员和 实体导航属性是 支持的。

有问题的查询是:

    // Here comes the aggregate query.
    object summary = from te in ctx.TimeEntries
                     where te.StartTime >= startofweek
                     && te.UserName == User.Identity.Name
                     group te by te.StartTime.Day into Groups
                     select new
                     {
                         Key = Groups.Key,
                         Count = Groups.Count(),
                         //Total = Groups.Sum(n => (double)((n.EndTime ?? DateTime.Now) - n.StartTime).TotalMinutes / 60),
                         Tasks = from t in Groups
                                 orderby t.StartTime descending
                                 select new
                                 {
                                     Name = t.Task.TaskName,
                                     Project = t.Task.Batch.Project.ProjectName,
                                     Batch = t.Task.Batch.BatchName,
                                     //Minutes = ((t.EndTime ?? DateTime.Now) - t.StartTime).Minutes,
                                     Start = t.StartTime.Date,
                                     Stop = t.EndTime,
                                     Description = t.Notes,
                                     Breaks = t.BreakFor ?? 0
                                 }
                     };

在上面的查询中,属性“Start”将失败并出现上述错误。但是,如果我只是“Start = t.StartTime”,一切都会好起来的。同样,注释掉“Minutes”的值也会引起问题。

非常欢迎提出建议!


您只能在 L2E 查询中使用受支持的成员,并且Date不是其中之一.

一种解决方法是将单个 L2E 查询分解为一个 L2E 查询,后接一个 LINQ to Objects 查询:

var q = from e in Context.Entities
        select new
        {
            Id = e.Id,
            DateTime = e.DateTime
        };

var r = from e in q.AsEnumerable()
        select new
        {
            Id = e.Id,
            Date = e.DateTime.Date
        };
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

聚合 LINQ 查询中的实体框架对象限制 的相关文章

随机推荐