Linq分组基于要求

时间:2016-12-22 18:39:08

标签: c# linq

我有一个销售数据表,其中包含单个项目销售,多个行构成系统中的单个帐单(BillID)。数据如下所示:

CompanyID | StoreID | BillItemID | BillID | DateKey |说明|一堆其他列出售金额和税金等。

重要的是BillID,我需要查找包含linq语句where子句中包含的项目的账单。

这是我目前的linq声明

FactSales
    .Where(c => c.CompanyID == 433)
    .Where(c => c.StoreID == 360)
    .Where(c => c.Description == "2 Piece Combo" || c.Description=="3 Piece Combo")
    .GroupBy(m => new { m.BillID })

选择所有2或3件组合的销售。但是这个小组并没有提供我需要的信息,因为在某些情况下,人们会购买相同商品的倍数,因此这些BillID不能代表销售这两件商品的账单。

这可以用linq吗?

2 个答案:

答案 0 :(得分:2)

如果我理解正确,您希望过滤掉Where中包含两个项的群组。

有几种方法可以做到这一点。

例如,计算组中的不同项目:

...
.Where(g => g.Select(c => c.Description).Distinct().Count() == 2)

或检查组内容是否存在项目(重复Where过滤条件):

...
.Where(g => g.Any(c => c.Description == "2 Piece Combo") &&
    g.Any(c => c.Description == "3 Piece Combo"))

答案 1 :(得分:0)

如何使用“&&”添加其他条件检查销售数量是否大于1.注意,OR已组合在一起。

FactSales
.Where(c => c.CompanyID == 433)
.Where(c => c.StoreID == 360)
.Where(c => (c.Description == "2 Piece Combo" || c.Description=="3 Piece Combo" ) && c.purchaseQuantity > 1)
.GroupBy(m => new { m.BillID })