对LINQ查询只是做了以下内容:(你需要使用System.Data.Entity.SqlServer
命名空间导入
执行此LINQ查询所有的计算都在服务器数据库上完成。请注意,Table1s
表示DbSet
为Table1
和context
是你DbContext
实例。
var query = from item in context.Table1s
group item by new
{
item.User,
Year = SqlFunctions.DatePart("yyyy", item.Date),
Month = SqlFunctions.DatePart("mm", item.Date),
Day = SqlFunctions.DatePart("dd", item.Date)
} into g
select new { g.Key.User, g.Key.Year, g.Key.Month, g.Key.Day, Count = g.Count() };
然后创建最终的结果是这样的:
var result = query.ToList().Select(p =>
new
{
p.User,
Date = new DateTime(p.Year.Value, p.Month.Value, p.Day.Value),
p.Count
}).ToList();
其他的解决方案是创建一个SQL视图,将通过的DbContext使用以检索所需的数据。 SQL视图正文必须是您在问题中写入的SQL。
编辑2:DbFunctions
像切廷Basoz在评论中指出,我们可以使用System.Data.Entity.DbFunctions为好。代码比使用SqlFunctions更清洁。这只适用于EF 6或更高版本。使用SqlFunctions的版本适用于EF 4及更高版本。
var query = from item in context.Table1s
group item by new
{
item.User,
Date = DbFunctions.TruncateTime(item.Date)
} into g
select new { g.Key.User, g.Key.Date, Count = g.Count() };
编辑1:这是具体的切廷Basoz的回答是:
大家都知道使用AsEnumerable效率不高,这样做所需要的。 第二个解决方案,他给了我们它是:
var grouped = from d in db.MyTable
group d by new {
User = d.User,
Date=d.Date.HasValue ? d.Date.Value.Date : (DateTime?)null} into g
select new {User=g.Key.User, Date=g.Key.Date, Count=g.Count()};
这种解决方案只是没有因为这个工作:
指定类型的成员“日期”在LINQ是不支持的实体。仅支持初始化程序,实体成员和实体导航属性。
编辑该问题。在linq中需要帮助 – user1893874
linq查询在哪里?即显示您尝试过的内容。 –
请添加您当前拥有的LInQ代码,以便我们对其进行修改 – Behrooz