Asp.net mvc 聚合LINQ查询中的实体框架对象限制
我有一个相当复杂的查询,我想返回一些特定的类型。主要是关于日期/时间计算或字符串值,当我尝试System.DateTime类型以外的任何东西时,实体框架似乎是在欺骗我 指定的类型成员“日期”为 LINQ to实体中不支持。 仅初始值设定项、实体成员和 实体导航属性为 支持 问题是: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
// 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
};
考虑到查询一开始就有多冗长,这可能不是一件坏事。我要试一试,看看它看起来怎么样。谢谢。是的,这很有效。这并没有使我的代码更加优雅,但确实提供了我所追求的自由。再次感谢。