2013-04-13 44 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>(); 
相關問題