2010-04-17 65 views
4

我找了LINQ查詢,看是否存在類似物體C#的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" } 
      } 
     } 

    } 
} 

我想從車得到= > CartProduct與我需要比較的CartProduct具有完全相同的CartProductAttribute標題值。 不多也不少。

E.G.我需要找到具有從對象圖與標題CartProductAttribute =「紅色」,並以標題中myCart(在本例如「cartProduct1」)一個cartProductAttribute =「小」

CartProduct cartProductToCompare = new CartProduct 
{ 
    List<CartProductAttribute> cartProductToCompareAttributes = new List<CartProductAttribute> 
    { 
     CartProductAttribute cpa5 = new CartProductAttribute{ title="red" }, 
     CartProductAttribute cpa6 = new CartProductAttribute{ title="small" } 
    } 
} 

所以類似CartProduct

  • myCart
    • cartProduct1
      • CPA1(標題=紅色)
      • CPA2(標題=小)
    • cartProduct2
      • CPA3(標題=約翰)
      • CPA4(標題=瑪麗)

Linq查詢尋找爲

  • cartProductToCompare
    • cpa5(標題=紅色)
    • CPA6(標題=小)

應該找到

  • cartProduct1

希望這一切都是有道理的...

謝謝

回答

5

我認爲這就是你以後。

var attributes = new [] { "red", "small" }; 
var result = myCart.Products.Where(product => 
    product.Attributes.All(attribute => 
     attributes.Contains(attribute.title) 
    ) 
); 
+0

感謝ChaosPandion,我是否正確地說我需要更改products.Attributes.Any到products.Attributes.All以便只返回「紅色」和「小」兩個匹配項? – 2010-04-17 04:35:46

+0

@John - 是的,我相信。 – ChaosPandion 2010-04-17 19:08:41