2016-10-21 74 views
0

我有一個問題,爲此我需要建議有關: 我有一個表(CurrentItems)的列:ID,ChangedTime,狀態,ItemType的,公司計數減計數Linq中

狀態列中包含一個數字,其中1意味着已添加,3意味着已刪除
我需要計算某個公司某個時間點的項目總數。任何itemtype都可以添加多次。

示例表包含:

1. Company A add(1) Item 1 at 2001-01-01 
2. Company B add(1) Item 1 at 2001-02-01 
3. Company A removes(3) Item 1 at 2001-03-01 
4. Company B add(1) Item 1 at 2001-04-01 
5. Company B removes(3) Item 1 at 2001-05-01 
6. Company A add(1) Item 1 at 2001-06-01 
7. Company A add(1) Item 1 at 2001-07-01 
8. Company B removes(3) Item 1 at 2001-08-01 

如果我看2001-05- 那麼結果應該是

Company A totalitems on date: 0 
Company B totalitems on date: 1 

如果我看2001-08- 結果應該是

Company A totalitems on date: 2 
Company B totalitems on date: 0 

如果可能的話,該解決方案將很適合在lambda語句中使用。

我得到了多少?

CurrentItems.Where(o=> (o.Status==1 || Status==3) && o.UpdatedTime < 
    DateTime.Parse("2001-08-02") &&o.Company="A").GroupBy(z=>z.Status) 
    .Select(z=> new 
    { 
    Name=z.Key, 
    Summa=z.Count(), 
    } 
... 

如果我在SQL執行此我會用兩個選擇的和一個。減去從另一個,但我認爲這是有可能把它寫在LINQ更緊湊的方式。

回答

1

你可以做這樣的事情:

CurrentItems.Where(o=> o.UpdatedTime < DateTime.Parse("2001-08-02") 
    .GroupBy(z=>z.Company) 
    .Select(z=> new 
    { 
     Name=z.Key, 
     Summa=z.Where(i => i.Status == 1).Count() - z.Where(i => i.Status == 3).Count() 
    }); 

它會給你的每家公司的總和。

+0

請注意,您可以將'Where(lambda).Count()'更改爲'Count(lambda)'。 – juharr

+0

是啊,你說得對,只是習俗,我更清楚何時有Where Clausule,因爲它更接近SQL。 – Gusman