Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 聚合LINQ查询中的实体框架对象限制_Asp.net Mvc_Linq_Entity Framework_Anonymous Types - Fatal编程技术网

Asp.net mvc 聚合LINQ查询中的实体框架对象限制

Asp.net mvc 聚合LINQ查询中的实体框架对象限制,asp.net-mvc,linq,entity-framework,anonymous-types,Asp.net Mvc,Linq,Entity Framework,Anonymous Types,我有一个相当复杂的查询,我想返回一些特定的类型。主要是关于日期/时间计算或字符串值,当我尝试System.DateTime类型以外的任何东西时,实体框架似乎是在欺骗我 指定的类型成员“日期”为 LINQ to实体中不支持。 仅初始值设定项、实体成员和 实体导航属性为 支持 问题是: // Here comes the aggregate query. object summary = from te in ctx.TimeEntries

我有一个相当复杂的查询,我想返回一些特定的类型。主要是关于日期/时间计算或字符串值,当我尝试System.DateTime类型以外的任何东西时,实体框架似乎是在欺骗我

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

问题是:

    // 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”,一切都会很好。同样,注释掉的“分钟”值也会导致问题


欢迎您的建议

您只能在L2E查询中使用受支持的成员,以及

一种解决方法是将单个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
        };

考虑到查询一开始就有多冗长,这可能不是一件坏事。我要试一试,看看它看起来怎么样。谢谢。是的,这很有效。这并没有使我的代码更加优雅,但确实提供了我所追求的自由。再次感谢。