c# - 这只能用 c# linq 来完成吗
问题描述
假设我有一个这样的订单列表:
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)));
}
解决方案
您的解决方案几乎就在那里,除了检查组中的每个订单是否同时具有 B1 和 B2 品牌,您需要获取所有 B1 和 B2 品牌并检查您是否有两个独特的品牌。
这与上面的解决方案基本相同,只是表达方式略有不同。
var test = Orders
.GroupBy(order => order.OrderName)
.Any(group => group
.Where(order => (order.ProductBrand == "B1" && order.ProductUnit > 3) || (order.ProductBrand == "B2" && order.ProductUnit > 3))
.Select(order => order.ProductBrand)
.Distinct()
.Count() == 2);
推荐阅读
- vue.js - NuxtJs 为动态网站生成?
- excel - 用数据计算行数
- sql - 如何使用引用记录控制记录的版本(外键)
- vuetify.js - vuetify v-hover 与 Animation on Scroll (aos) 冲突
- amazon-web-services - 第一个实例启动后多少分钟 Auto Scaling 会接受另一个扩展活动请求?
- machine-learning - 如果我们在管道中包含转换器,来自 scikit-learn 的“cross_val_score”和“GridsearchCV”的 k 折交叉验证分数是否存在偏差?
- getgauge - 无法使用 npm 安装 Gauge
- r - 如何在 R 中按块从数据库中读取数据?
- sql - 使用 XSLT 函数将日期转换为 SQL 格式
- tcl - 为什么在构建 TCL 源时忽略头文件更改?