如何使用LINQ比较同一对象的两个属性

本文关键字:属性 两个 对象 LINQ 何使用 比较 | 更新日期: 2023-09-27 18:26:53

我有以下类

class MyClass
{
    public int ActualAge {get;set;}
    public int ReportedAge{get;set;}
}

我有一个以上类的填充集合,如下

List<MyClass> myClassList = new List<MyClass>
{ 
    new MyClass { ActualAge= 10, ReportedAge =10}, 
    new MyClass { ActualAge= 10, ReportedAge =30} , 
    new MyClass { ActualAge= 20, ReportedAge =20}, 
    new MyClass { ActualAge= 10, ReportedAge = 90}
};

现在的挑战是如果

AcutalAge == ReportedAge

那么(假设还有另一个变量)

private List<int> Age

年龄变量应等于ActualAge属性的集合,如果不等于,则年龄变量应与ActualAge/ReportedAge的集合相等。

我想知道如何在C#中使用LINQ来实现这一点。

如何使用LINQ比较同一对象的两个属性

如果Age被声明为List<string>您可以使用以下代码来填充此列表

List<string> Age
Age = myClassList.Select(x => x.ReportedAge == x.ActualAge ?
                                          x.ReportedAge.ToString() :
                                          string.Format("{0}/{1}", x.ReportedAge, x.ActualAge)).ToList()

因此,您的列表将包含1012/134015/18

您想对myClassList执行"选择",将每个项目的所需状态映射到您的结果Age列表中。当两者相等时,为了只显示ActualAge,请在Select:中使用条件语句

List<string> Age = myClassList.Select(i =>
                                      i.ActualAge == i.ReportedAge
                                         ? i.ActualAge.ToString()
                                         : String.Format("{0}/{1}",
                                             i.ActualAge,
                                             i.ReportedAge)
                    ).ToList();

IList<string> Age = myClassList.Select(x => x.ActualAge == x.ReportedAge ? x.ActualAge + "/" + x.ReportedAge : x.ActualAge.ToString()).ToList()