Linq 中 GroupBy 中的计数减去计数
Count minus Count in GroupBy in Linq
我有一个问题,需要有关以下方面的建议:
我得到了一个 table(CurrentItems) 列:Id、ChangedTime、Status、ItemType、Company
状态列包含一个数字,其中 1 表示已添加,3 表示已删除
我需要计算某个公司在某个时间点的项目总数。任何项目类型都可以添加多次。
示例 table 包含:
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-02 那么结果应该是
Company A totalitems on date: 0
Company B totalitems on date: 1
如果我查看 2001-08-02 结果应该是
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 中执行此操作,我将使用两个 select 并从另一个中减去一个,但我认为可以在 LINQ 中以更紧凑的方式编写它。
你可以这样做:
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()
});
它会给你每家公司的总和。
我有一个问题,需要有关以下方面的建议: 我得到了一个 table(CurrentItems) 列:Id、ChangedTime、Status、ItemType、Company
状态列包含一个数字,其中 1 表示已添加,3 表示已删除
我需要计算某个公司在某个时间点的项目总数。任何项目类型都可以添加多次。
示例 table 包含:
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-02 那么结果应该是
Company A totalitems on date: 0
Company B totalitems on date: 1
如果我查看 2001-08-02 结果应该是
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 中执行此操作,我将使用两个 select 并从另一个中减去一个,但我认为可以在 LINQ 中以更紧凑的方式编写它。
你可以这样做:
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()
});
它会给你每家公司的总和。