我有LINQ代码,但收到以下错误:System.ServiceModel.FaultException: The type 'ObjectMgmt' is not supported in aggregation operations.
(from cinnost in edc.CinnostSOPs
where cinnost.LegislativneVyznamna == true &&
cinnost.ObjektId == objektid
select (from o in edc.PlanRealizaces
where o.CinnostSOPIdSOP == cinnost.IdSOP &&
o.DatumPlatnosti <= DateTime.Now &&
o.Provest == true &&
o.DatumProvedeni == null
orderby o.DatumPlatnosti descending
select new ObjectMgmt
{
Datum = (DateTime.Now.Date - o.DatumPlatnosti.Value).TotalDays
}).Max(m => m)).ToList<ObjectMgmt>();
答案 0 :(得分:2)
该消息说的是聚合。我看到的唯一聚合是Max
调用。这是调试问题所需的提示。
您关心计算ObjectMgmt
个实例序列的最大值,这显然是不可能的。把它改成你真正的意思。
答案 1 :(得分:1)
您收到的编译器错误告诉您ObjectMgmt
不能用作聚合的来源。这是因为Max
要求ObjectMgmt
类型实现IComparable
。
格式化查询后,为了使其更具可读性,您似乎希望找到ObjectMgmt
实例,其中Datum
具有最大值。
由于您已经按DatumPlatnosti
降序排序了值,因此您知道通过增加ObjectMgmt
值来排序Datum
个实例。因此,您根本不需要聚合。只需取序列的最后一个元素(但我会按升序排序,然后取第一个元素)。
(from cinnost in edc.CinnostSOPs
where cinnost.LegislativneVyznamna == true &&
cinnost.ObjektId == objektid
select (from o in edc.PlanRealizaces
where o.CinnostSOPIdSOP == cinnost.IdSOP &&
o.DatumPlatnosti <= DateTime.Now &&
o.Provest == true &&
o.DatumProvedeni == null
orderby o.DatumPlatnosti
select new ObjectMgmt
{
Datum = (DateTime.Now.Date - o.DatumPlatnosti.Value).TotalDays
}).First()).ToList<ObjectMgmt>();
答案 2 :(得分:0)
由于您的ObjectMgmt
个对象只有一个由查询填充的属性:Datum
,请将Max
调用更改为Datum
的最大值,而不是ObjectMgmt
本身:
(from cinnost in edc.CinnostSOPs
where cinnost.LegislativneVyznamna == true &&
cinnost.ObjektId == objektid
select (from o in edc.PlanRealizaces
where o.CinnostSOPIdSOP == cinnost.IdSOP &&
o.DatumPlatnosti <= DateTime.Now &&
o.Provest == true &&
o.DatumProvedeni == null
orderby o.DatumPlatnosti descending
select new ObjectMgmt
{
Datum = (DateTime.Now.Date - o.DatumPlatnosti.Value).TotalDays
}).Max(m => m.Datum)).ToList<ObjectMgmt>();