我有一个项目列表,每个项目都可以有多个关键字,所以我有三个表
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 的东西,或者是否有某种方法可以执行此功能。
我曾尝试使用“除外”和“相交”,但似乎无法获得正确的结果。
我想要一个查询,以便很容易编译查询,但这不是一个交易破坏者。
我在用:
我不能使用包含查询,因为它本质上会返回所有带有“狗”或“猫”的项目。
这是不正确的。您可以使用带有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)
请检查此..代码写得更长以便更好地理解..假设每个项目作为要检查的标识符
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)
| 归档时间: |
|
| 查看次数: |
3898 次 |
| 最近记录: |