通过给定示例中的属性快速查找产品的方法是什么?我有一个包含3000个产品的列表,每个产品都有一个包含12个属性对象的列表,如示例中所示。我需要能够使用n个属性快速找到产品。
public class Test
{
public class ProductProperty
{
public string Name { get; set; }
public string Value { get; set; }
public ProductProperty() { }
public ProductProperty(string name, string value)
{
this.Name = name;
this.Value = value;
}
}
public class Product
{
public string ProductName { get; set; }
public ProductProperty[] Properties { get; set; }
}
public static void Main(string[] args)
{
List<Product> models = new List<Product>()
{
new Product() { ProductName = "Test1", Properties = new ProductProperty[] { new ProductProperty("title", "car"), new ProductProperty("length", "5") } },
new Product() { ProductName = "Test1", Properties = new ProductProperty[] { new ProductProperty("title", "car"), new ProductProperty("length", "7") } },
new Product() { ProductName = "Test1", Properties = new ProductProperty[] { new ProductProperty("title", "ship"), new ProductProperty("length", "9") } },
};
var findByProps = new ProductProperty[] { new ProductProperty("title", "car"), new ProductProperty("length", "7") };
// var product = find Product that has title=car and length=7
}
}
答案 0 :(得分:4)
如果覆盖ProductProperty
内的等于方法:
public override bool Equals(object o) => o is ProductProperty p && p.Name == Name && p.Value== Value;
将ProductProperty相互比较更容易(您也可以实现IEquatable)。 (注意,旧的Visual工作室不支持上面的语法,但如果需要可以轻松地重写) 一旦被覆盖,可以使用任何默认方法,例如Contains:
var product = models.FirstOrDefault(m=> findByProps.All(m.Properties.Contains));