Linq包含所有方法?

时间:2014-09-26 12:08:24

标签: c# linq

我有一个项目列表,每个项目都有多个关键字,所以我有三个表格

Item -> ItemKeyword <- Keyword

我想返回项目列表中所有关键字的所有项目。例如:

Item 1 has keywords "Rabbit", "Dog", "Cat" 
Item 2 has keywords "Rabbit", Hedgehog", "Dog"

我想只返回那些同时包含“狗”和“猫”的项目作为关键字。

我无法使用包含查询,因为它基本上会返回带有“Dog”或“Cat”的所有项目。

所以我想我要求的是在linq中是否存在一个名为ContainsAll的东西,或者是否有某些方法可以执行此功能。

我试图使用Except和Intersect但我似乎无法得到正确的结果。

我想要一个查询,以便编译查询很容易,但这不是一个破坏者。

我正在使用:

  1. Dot Net 4.5
  2. Visual Studio 2012
  3. C#
  4. LINQ的
  5. 实体框架
  6. Sql Server Ce 4.0

2 个答案:

答案 0 :(得分:2)

  

我无法使用包含查询,因为它基本上会返回带有“Dog”或“Cat”的所有项目。

这根本不是真的。您可以使用两个包含AND&amp;&amp; :

items.Where(item => item.Keywords.Contains("Dog") && item.Keywords.Contains("Cat"));

或者您可以将您要查找的值放在数组中,然后使用All方法缩短它:

var values = new [] { "Dog", "Cat" };
items.Where(item => values.All(item.Keywords.Contains));

答案 1 :(得分:1)

请检查此..代码写得更长,以便更好地理解..假设每个项目作为标识符来检查

        List<item> ItemsList = new List<item>();
        item item1 = new item();
        item1.ID = "1";
        item1.keywords = new List<string>();
        item1.keywords.Add("Rabbit");
        item1.keywords.Add("Dog");
        item1.keywords.Add("Cat");

        ItemsList.Add(item1);

        item item2 = new item();
        item2.ID = "2";
        item2.keywords = new List<string>();
        item2.keywords.Add("Rabbit");
        item2.keywords.Add("Hedgehog");
        item2.keywords.Add("Dog");

        ItemsList.Add(item2);

        //this the list you want to check
        var values = new List<string> (); 
        values.Add("Dog");
        values.Add("Cat");

        var result = from x in ItemsList
                     where !(values.Except(x.keywords).Any())
                     select x;

        foreach (var item in result)
        {
          // Check the item.ID;

        }