2013-04-13 46 views
0

我有LINQ代码,我收到以下错误:集合体System.ServiceModel.FaultException: The type 'ObjectMgmt' is not supported in aggregation operations.LINQ错误的类型不是在聚合操作支持

(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

哇,查询是完全无法辨认。你能自己读这个代码吗? – usr

回答

1

您收到的编译器错误告诉您,ObjectMgmt不能用作聚合源。发生这种情况是因为Max要求ObjectMgmt类型实现IComparable

将格式化您的查询以使其更具可读性后,您似乎希望找到实例,其中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

消息说话。我看到的唯一聚合是Max呼叫。这是调试问题所需的提示。

你很在意计算一个ObjectMgmt实例序列的最大值,这显然是不可能的。改变你的意思。

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>(); 
相关问题