假设我有一个这样的订单清单:
OrderName ProductBrand ProductUnit
A B1 5
B B2 4
B B3 2
A B2 4
我有兴趣返回一个布尔值,说是否有订单 拥有B1和B2品牌,产品单位大于3。
这是我尝试过的:
public class Order
{
public string OrderName { get; set; }
public string ProductBrand { get; set; }
public int ProductUnit { get; set; }
public Order(string orderName, string productName, int productUnit)
{
OrderName = orderName;
ProductBrand = productName;
ProductUnit = productUnit;
}
}
static void Main(string[] args)
{
var Orders = new List<Order>
{
new Order("A" , "B1" , 5),
new Order("B" , "B2" , 4),
new Order("B" , "B3" , 2),
new Order("A" , "B2" , 4)
};
var test = Orders.GroupBy(x => x.OrderName)
.Any(y => y.Any( z => (z.ProductBrand == "B1" && z.ProductUnit > 3)
&& (z.ProductBrand == "B2" && z.ProductUnit > 3)));
}
答案 0 :(得分:1)
static void Main(string[] args)
{
var Orders = new List<Order>
{
new Order("A" , "B1" , 5),
new Order("B" , "B2" , 4),
new Order("B" , "B3" , 2),
new Order("A" , "B2" , 4)
};
var test = Orders.GroupBy(x => x.OrderName)
.Any(y => y.Any( z => (z.ProductBrand == "B1" && z.ProductUnit > 3))
&& y.Any( l => (l.ProductBrand == "B2" && l.ProductUnit > 3)));
}
在查询中,您正在检查包含两个子句的单个元素,该元素始终为false,因为一个元素不能同时具有ProductBrand
B1
和B2
您需要检查2个不同的元素,即检查两次。
答案 1 :(得分:0)
尝试一下:
var orders = new List<Order>
{
new Order("A" , "B1" , 5),
new Order("B" , "B2" , 4),
new Order("B" , "B3" , 2),
new Order("A" , "B2" , 4)
};
orders
.Where(o => o.ProductUnit > 3 && (o.ProductBrand == "B1" || o.ProductBrand == "B2"))
.GroupBy(o => o.OrderName)
.Where(g => g.Select(o => o.OrderName).Distinct().Count() >= 2)
.Select(g => g.Key)
.Any();
答案 2 :(得分:0)
您的解决方案几乎就存在了,除了您需要检查组中的每个订单是否都有B1和B2品牌,而是需要获得所有B1和B2品牌并检查您是否拥有两个独特的品牌。
这与上面的解决方案基本相同,只是表达略有不同。
807244