在添加新列表之前,使用Contains()检查列表中是否存在多个对象值?

萤火虫

在将新对象添加到列表之前,如何检查对象中的多个属性以查看其是否存在于列表中?Contains()在这里不起作用,那么应该怎么做呢?

我这里是一个大列表模型,我想将一些数据移植到一个没有重复值,具有唯一值的新的较短列表模型中。

谢谢..

public class Fee {
   public string Year { get; set; }
   public string Make { get; set; }
   public string Model { get; set; }
   public string Vin { get; set; }
   public string Color { get; set; }
}
public class Foo {
   public string Year { get; set; }
   public string Make { get; set; }
   public string Model { get; set; }
}

List<Fee> modelVehicles = new List<Fee>();
List<Foo> returnVehicles = new List<Foo>();

modelVehicles.Add(new Fee() { Year = "2001", Make = "Ford", Model = "Mustang", Vin = "111", Color = "Green" });
modelVehicles.Add(new Fee() { Year = "2001", Make = "Ford", Model = "Mustang", Vin = "222", Color = "Red" });
modelVehicles.Add(new Fee() { Year = "2001", Make = "Ford", Model = "Mustang", Vin = "333", Color = "Black" });

foreach(var v in modelVehicles)
{
    if (returnVehicles.Contains(new Foo { Year = v.Year, Make = v.Make, Model = v.Model }) == false)
    {
       returnVehicles.Add(
           new Foo {
               Year = v.Year,
               Make = v.Make, 
               Model = v.Model
           }
       );
    }
}
康拉德·科科萨(Konrad Kokosa)

您可以使用GroupByoperator,因为实际上您的操作是分组的:

returnVehicles = modelVehicles.GroupBy(x => new { x.Year, x.Make, x.Model }, 
                                       x => new Foo() {
                                           Year = x.Year,
                                           Make = x.Make,
                                           Model = x.Model
                                      },
                                      (key, values) => values.First())
                               .ToList();

并且如果您实现EqualsGetHashCode用于Foo

public class Foo
{
    public string Year { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }

    public override bool Equals(object obj)
    {
        Foo other = obj as Foo;
        if (other == null)
            return false;
        return string.Equals(Year, other.Year) && 
               string.Equals(Make, other.Make) && 
               string.Equals(Model, other.Model);
    }

    public override int GetHashCode()
    {
        int hash = 13;
        hash = (hash * 7) + Year.GetHashCode();
        hash = (hash * 7) + Make.GetHashCode();
        hash = (hash * 7) + Model.GetHashCode();
        return hash;
    }
}

这可以简化:

returnVehicles = modelVehicles.GroupBy(x => new Foo() {
                                               Year = x.Year,
                                               Make = x.Make,
                                               Model = x.Model
                                            }, 
                                       (key, values) => key)
                                .ToList();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在将对象添加到列表之前,如何使用LINQ语句检查现有列表中的任何对象是否已存在变量?

检查键值对列表中是否存在值,如果不存在,则从可迭代对象中添加新的键对值(不覆盖相同的键)

在添加对象之前,如何检查具有相同ID的对象是否已存在于对象列表中?

如何检查对象列表中是否存在枚举值

检查对象的列表数组中是否存在值

检查包含对象的列表中是否存在值的条件,

如何检查python对象列表中是否存在值

检查列表中是否存在具有特定值的对象

如何使用XPath检查元素列表中是否存在值?

如何检查列表中是否存在值?

检查列表中是否存在值

检查列表中是否存在值

在循环中添加相同的对象之前,无法检查列表中是否有对象

使用Linq搜索对象列表中是否存在值

检查对象列表中是否存在数组列表

如何遍历列表的javascript数组并检查值是否存在然后更新否则添加新数据

检查对象列表中任何对象的属性中是否存在值

检查值是否存在,如果不存在则添加到列表中

检查对象列表中是否存在对象属性

如何检查字典中多个列表中是否存在值,并获取相应的键?

检查列表中是否存在

如何使用Java检查指定对象是否存在于给定对象列表中

如何使用C#检查对象列表中是否已存在对象

检查列表中是否存在多个文件(不同的路径)

如何检查smlnj中的列表中是否存在值

颤动:检查列表中是否已存在对象

检查列表中是否已存在对象

检查数据框列中的值是否存在于列表中,并根据检查结果创建新列

检查 activerecord 对象中多个属性的值是否存在