2010-03-14 48 views
0

您好,我希望對我的查詢有所幫助。從返回的linq查詢中刪除值

我有這個疑問

var group = 
    from r in CustomerItem 
    group r by r.StoreItemID into g 
    select new { StoreItemID = g.Key, 
       ItemCount = g.Count(), 
       ItemAmount = Customer.Sum(cr => cr.ItemAmount), 
       RedeemedAmount = Customer.Sum(x => x.RedeemedAmount) 
       }; 

我回到我的結果列表,這樣我就可以將它綁定列表框。

我有一個名爲EntryType屬性是一個int。有2個可用的數字1或2

可以說,我有3個項目,我的查詢正在與

其中2有EntryType = 1和第3次有EntryType2。第一條記錄的ItemAmount爲55.00,第三條的ItemAmount爲50.00

如何分組使用類似以上的東西但從組合數量減去50.00的ItemAmount返回60.00?

任何幫助將是偉大的!

+0

什麼是您的查詢中的「客戶」? – 2010-03-14 18:54:13

+0

看來你並不是真的想刪除任何值,你想添加一些並減去其他值。您的標題有誤導性。 – 2010-03-14 19:04:02

回答

0

這個問題並不十分清楚 - 你是否試圖忽略入口類型爲2的所有項目?換句話說,你只想保持入口類型爲1的條目?如果是這樣,只需添加一個where條款:

var group = from r in CustomerItem 
      where r.EntryType == 1 
      group r by r.StoreItemID into g 
      select new { 
       StoreItemID = g.Key, ItemCount = g.Count(), 
       ItemAmount = Customer.Sum(cr => cr.ItemAmount), 
       RedeemedAmount = Customer.Sum(x => x.RedeemedAmount) 
      }; 
0

更改ItemAmount = ...:從你的問題

ItemAmount = 
    g.Where(x => x.EntryType == 1).Sum(cr => cr.ItemAmount) - 
    g.Where(x => x.EntryType == 2).Sum(cr => cr.ItemAmount), 

我改變Customerg,因爲這似乎是一個錯誤,但它不是我清楚什麼你的意思是在這裏,所以也許這種改變不是你想要的。

稍微更簡潔的方法是使用測試的總和條目類型,並使用三元操作者選擇是否添加正或負的價值:

ItemAmount = g.Sum(cr => cr.EntryType == 1 ? cr.ItemAmount : -cr.ItemAmount), 

這給出了60.00的數值爲你需要。