比较多种条件下的列表
本文关键字:列表 条件下 比较 | 更新日期: 2023-09-27 17:56:22
public class ConsumableThreshold
{
public int ThresholdType { get; set; }
public int ManufacturerID { get; set; }
public int ModelID { get; set; }
public int ConsumableVariantID { get; set; }
}
我正在尝试检查共享属性的两个对象列表。我需要根据之前比赛的结果检查各种其他属性。
例如,如果阈值类型匹配,则需要检查第二个属性,如果匹配,则需要检查ModelID。
我有这个查询,它有效地完成了我想要的,但它存在问题,主要是我钻得越深,可读性就会降低得越多。
var query= existingThresholds.Where(
e => defaultThresholds.Any(
d => d.ThresholdType == e.ThresholdType)).Where(
e => defaultThresholds.Any(
d => d.ManufacturerID == e.ManufacturerID)).ToList();
我想使用 join
执行此操作,但它不支持 &&
运算符。
var query2 = from e in existingThresholds
join d in defaultThresholdson
e.ThresholdType equals d.ThresholdType &&
e.ManufacturerID equals d.ManufacturerID
select e;
有没有办法在不链接.Where()
条件的情况下将其编写为查询?
当然 - 你只是在尝试加入复合键,这通常通过匿名类型完成:
var query2 = from e in existingThresholds
join d in defaultThresholdson
on new { e.ThresholdType, e.ManufacturerID } equals
new { d.ThresholdType, d.ManufacturerID }
select e;
(诚然,以后忽略一半的连接有点奇怪......
是的,有没有办法在不链接的情况下将其编写为查询.哪里()条件?
使用匿名类型,该类型具有内置的相等性检查,可按名称比较所有属性的值:
var query2 = from e in existingThresholds
join d in defaultThresholds
on new { e.ThresholdType , e.ManufacturerID }
equals new { d.ThresholdType , d.ManufacturerID }
select e;