比较多种条件下的列表

本文关键字:列表 条件下 比较 | 更新日期: 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;