C# 执行';系统Linq可枚举:GroupBy(IEnumerable`1,Func`2)和#x27;在数据库服务器端,当前未实现
我发现了错误 当前未在数据库服务器端执行“System.Linq.Enumerable:GroupBy(IEnumerable`1,Func`2)” 当我执行以下查询时C# 执行';系统Linq可枚举:GroupBy(IEnumerable`1,Func`2)和#x27;在数据库服务器端,当前未实现,c#,linq,group-by,telerik,telerik-open-access,C#,Linq,Group By,Telerik,Telerik Open Access,我发现了错误 当前未在数据库服务器端执行“System.Linq.Enumerable:GroupBy(IEnumerable`1,Func`2)” 当我执行以下查询时 from t in dbContext.TrackerRecords where t.DeviceSerial.Value.Equals(deviceSerial) && t.Date.Value >= fromDate && t.Date.Value <= toDate
from t in dbContext.TrackerRecords
where t.DeviceSerial.Value.Equals(deviceSerial) &&
t.Date.Value >= fromDate && t.Date.Value <= toDate
orderby t.Date.Value descending
group t by t.Date.Value.Date into g
select new TripDataModel
{
Day = g.Key,
Trips = (from x in g
group x by x.Date.Value.Hour into gj
where gj.Max(m => m.Speed.Value) > 0
let AvgSpd = gj.Average(m => m.Speed.Value)
select new TripModel
{
MinSpeed = gj.Min(m => m.Speed.Value),
MaxSpeed = gj.Max(m => m.Speed.Value),
AvgSpeed = AvgSpd > 0
? Math.Round(AvgSpd, 2, MidpointRounding.AwayFromZero)
: 0,
FromHour = new DateTime(g.Key.Year, g.Key.Month, g.Key.Day, gj.Key, 0, 0)
})
}
来自dbContext.TrackerRecords中的t
其中t.DeviceSerial.Value.Equals(DeviceSerial)&&
t、 Date.Value>=fromDate&&t.Date.Value m.Speed.Value)>0
设AvgSpd=gj.平均值(m=>m.速度值)
选择新的TripModel
{
MinSpeed=gj.Min(m=>m.Speed.Value),
MaxSpeed=gj.Max(m=>m.Speed.Value),
AvgSpeed=AvgSpd>0
?数学舍入(AvgSpd,2,中点舍入。远离零)
: 0,
FromHour=新日期时间(g.Key.Year,g.Key.Month,g.Key.Day,gj.Key,0,0)
})
}
我在linqtosql中尝试了这个查询,结果很好,但我需要使用Telerik OpenAccess
有什么解决方案或解决办法吗?
在第一个查询之后,将其转换为列表,然后运行子查询
像这样:
from t in dbContext.TrackerRecords.ToList()
然后是查询的其余部分。您可以在内存中分组,而不是在服务器端吗?为什么要在内存中分组LinqToSql可以在服务器端分组。为什么openAccess不能?错误消息让我想到,在openAccess中还没有实现linq group by。而且,假设它有自己的实现(不使用其背后的LinqToSql),您可以将group by与LinqToSql一起使用,但不能与OpenAccess一起使用。但是,在看过之后,我认为GroupBy应该在OpenAccess中实现。最好试着在那个论坛上发布这个问题。如果查询真的不能在服务器端执行,那么你不应该使用
ToList
来使用Linq to objects来评估它,你应该使用AsEnumerable
。如果你使用AsEnumerable
它仍然在数据库上执行吗?