C#Linq列表包含类似的元素

Joh*_*ers 4 c# linq

我正在寻找linq查询,看看是否存在类似的对象

我有一个对象图如下

Cart myCart = new Cart
{
    List<CartProduct> myCartProduct = new List<CartProduct>
    {
        CartProduct cartProduct1 = new CartProduct
        {
            List<CartProductAttribute> a = new List<CartProductAttribute>
            {
                CartProductAttribute cpa1 = new CartProductAttribute{ title="red" },
                CartProductAttribute cpa2 = new CartProductAttribute{ title="small" }
            }
        }

        CartProduct cartProduct2 = new CartProduct
        {
            List<CartProductAttribute> d = new List<CartProductAttribute>
            {
                CartProductAttribute cpa3 = new CartProductAttribute{ title="john" },
                CartProductAttribute cpa4 = new CartProductAttribute{ title="mary" }
            }
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

我想从Cart =>一个CartProduct获得具有与我需要比较的CartProduct完全相同的CartProductAttribute标题值.不多也不少.

EG我需要在myCart中找到一个类似的CartProduct,其CartProductAttribute标题为title ="red",cartProductAttribute标题为title ="small"(例如示例中为'cartProduct1')

CartProduct cartProductToCompare = new CartProduct
{
    List<CartProductAttribute> cartProductToCompareAttributes = new List<CartProductAttribute>
    {
        CartProductAttribute cpa5 = new CartProductAttribute{ title="red" },
        CartProductAttribute cpa6 = new CartProductAttribute{ title="small" }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以从对象图

  • 我的车
    • cartProduct1
      • cpa1(标题=红色)
      • cpa2(标题=小)
    • cartProduct2
      • cpa3(title = john)
      • cpa4(title = mary)

Linq查询寻找

  • cartProductToCompare
    • cpa5(标题=红色)
    • cpa6(标题=小)

应该找到

  • cartProduct1

希望这一切都有道理......

谢谢

Cha*_*ion 5

我想这就是你所追求的.

var attributes = new [] { "red", "small" };
var result = myCart.Products.Where(product => 
    product.Attributes.All(attribute => 
        attributes.Contains(attribute.title)
    )
);
Run Code Online (Sandbox Code Playgroud)