我有一个销售数据表,其中包含单个项目销售,多个行构成系统中的单个帐单(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吗?
答案 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 })