Linq包含所有方法?

Ste*_*ood 3 c# linq

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

Item -> ItemKeyword <- Keyword
Run Code Online (Sandbox Code Playgroud)

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

Item 1 has keywords "Rabbit", "Dog", "Cat" 
Item 2 has keywords "Rabbit", Hedgehog", "Dog"
Run Code Online (Sandbox Code Playgroud)

我只想返回那些同时将“Dog”和“Cat”作为关键字的项目。

我不能使用包含查询,因为它本质上会返回所有带有“狗”或“猫”的项目。

所以我想我要问的是在 linq 中是否有一个叫做 ContainsAll 的东西,或者是否有某种方法可以执行此功能。

我曾尝试使用“除外”和“相交”,但似乎无法获得正确的结果。

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

我在用:

  1. 点网 4.5
  2. 视觉工作室 2012
  3. C#
  4. 林克
  5. 实体框架
  6. SQL Server Ce 4.0

Sel*_*enç 5

我不能使用包含查询,因为它本质上会返回所有带有“狗”或“猫”的项目。

这是不正确的。您可以使用带有AND&& 的两个包含:

items.Where(item => item.Keywords.Contains("Dog") && item.Keywords.Contains("Cat"));
Run Code Online (Sandbox Code Playgroud)

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

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


kis*_*V M 2

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

        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;

        }
Run Code Online (Sandbox Code Playgroud)