2012-07-05 29 views
1

我正在嘗試執行查詢以生成裝箱單,並且需要一般訂單信息以及訂單包含的項目數。LINQ查詢以選擇對象並計數

這裏是我的基本查詢:

var orders = (from cert in _orderRepository.GetAll() 
          where !cert.PrintedPackSlip 
          orderby cert.CardNumber 
          //group cert by cert.CardNumber 
          //into certGrp 
          select cert); 

我需要做的是通過CardNumber組和做多少訂單有卡號的計數。

我會理想它出來像字典,如果在所有可能的

+0

我們是在談論L2EF還是L2SQL?如果是EF,請參閱我有關類似問題的問題:http://stackoverflow.com/questions/10723439/linq-to-entities-get-results-row-count-in-one-query – walther 2012-07-05 19:06:49

+0

我的ORM非常流暢,非常友好。這仍然適用? – 2012-07-05 19:10:05

回答

1

如果我理解正確的話,每個訂單要列出該卡號的訂單總數,在這種情況下,以下情況應該起作用:

 var orders = (from cert in _orderRepository.GetAll() 
         join cert2 in _orderRepository.GetAll() 
         on cert.CardNumber equals cert2.CardNumber 
         where !cert.PrintedPackSlip 
         where !cert2.PrintedPackSlip 
         group cert by cert 
         into certGrp 
         select certGrp).ToDictionary(o => o.Key,o => o.Count()) 
+0

它看起來像像它是不可能得到實際的訂單,但只有密鑰(或CardNumber)? – 2012-07-05 19:42:37

+0

嘗試將其更改爲.ToDictionary(o => o.First(),o => o.Count())雖然這假設組中的第一個訂單是所有訂單的代表(沒有看到組成訂單的其餘數據,但我不能說這是否爲真) – 2012-07-05 19:46:01

+0

這不是事實。可能有多個訂單訂單有相同的卡號,我們想將它們組合在一起以獲得計數。對不起,如果這是令人困惑的。感謝您的幫助,雖然! – 2012-07-05 19:50:47

1

可能是這樣的:

var orders = from cert in _orderRepository.GetAll() 
         where !cert.PrintedPackSlip 
         orderby cert.CardNumber 
         group cert by cert.CardNumber into certGrp 
         select new {CardNumber = certGrp.Key, Count = certGrp.Count()); 

foreach(var item in orders) 
    Console.WriteLine("item.CardNumber: " + item.CardNumber + " item.Count: " + item.Count.ToString()); 
+0

'cert'在分組後不在範圍內,您必須使用密鑰。我做了更正。 – 2012-07-05 19:13:36

+0

這實質上就是我以前所做的,但我會*理想地*它會像字典一樣出現,如果可能的話。 (將添加到問題的澄清。 – 2012-07-05 19:18:46

+0

@mmillican爲字典,只需將此LINQ查詢放在括號中並附加'.ToDictionary (x => x.CardNumer,x => x.Count)' – Arithmomaniac 2012-07-05 19:31:30