LINQ错误聚合操作不支持该类型

时间:2013-04-13 21:39:15

标签: linq

我有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>();

3 个答案:

答案 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>();