2013-06-26 47 views
1

我在我的控制器中查詢我的IEnumerable集合時出現以下LINQ查詢,當我在我的視圖中輸出結果時分組工作,但是當我嘗試在列上添加一個計數時,悲慘地失敗了。我想知道是否有人可以提供幫助,我一直在看以前的例子,但我錯過了一些明顯的例子。Linq組和計數在IEnumerable中

分組//做工精細,並返回分組描述

itemdetails = (from c in db.CLIENTDETAILS 
          join l in db.LOCATIONS on c.CLIENTNUMBER equals l.CLIENTNUMBER 
          where c.CLIENTNUMBER == clientNumber 
          join i in db.ITEMDETAILS on l.LOCNUMBER equals i.LOCNUMBER 
          where i.LOCNUMBER == l.LOCNUMBER 
          select i).GroupBy(it => it.DESC).Select(grp => grp.FirstOrDefault()).OrderBy(x => x.DESC) 

我試圖讓集團與LINQ計數//不工作返回錯誤

itemdetails = (from c in db.CLIENTDETAILS 
          join l in db.LOCATIONS on c.CLIENTNUMBER equals l.CLIENTNUMBER 
          where c.CLIENTNUMBER == clientNumber 
          join i in db.ITEMDETAILS on l.LOCNUMBER equals i.LOCNUMBER 
          where i.LOCNUMBER == l.LOCNUMBER 
          select i).GroupBy(it => it.DESC).Select(grp => new {DESC = grp.key, Count = grp.COUNT()}).OrderBy(x => x.DESC) 

這給我下面的錯誤: - 不能隱式地將類型系統linq iorderedqueryable轉換爲system.collections.generic.ienumerable

感謝您的一如既往的幫助。

+0

申報http://stackoverflow.com/questions/7285714/linq-with-groupby-並計數 –

+0

'itemdetails'的類型是什麼?這個問題可能來自於它與你的匿名類的IEnumerable不兼容的事實。 – Alxandr

+0

嗨Alxandr,itemdetails在viewmodel – ullevi83

回答

2

您的兩個查詢返回不同的數據,第一個返回ItemDetail類型的項目,而第二個查詢返回的是匿名類型的項目。

如果你想要一個IEnumerable匿名類型,你需要使用它的var關鍵字,即

var itemdetails = (from c in db.CLIENTDETAILS 
          join l in db.LOCATIONS on c.CLIENTNUMBER equals l.CLIENTNUMBER 
          where c.CLIENTNUMBER == clientNumber 
          join i in db.ITEMDETAILS on l.LOCNUMBER equals i.LOCNUMBER 
          where i.LOCNUMBER == l.LOCNUMBER 
          select i).GroupBy(it => it.DESC).Select(grp => new {DESC = grp.key, Count = grp.COUNT()}).OrderBy(x => x.DESC) 
+0

謝謝Lukazoid,爲什麼它允許我在第一個查詢中的列DESC上組,但是當我嘗試和計數在db.ITEMDETAILS中的同一列它返回錯誤?我認爲,因爲它不知道我珍藏的收藏品細節中有什麼數量? – ullevi83

+0

這將歸結爲您正在使用的ORM,它似乎無法將'.Count()'的表達式轉換爲SQL查詢。 – Lukazoid

+0

謝謝Lukazoid – ullevi83