Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于给定的项目列表在集合中搜索_C#_Linq_Search - Fatal编程技术网

C# 基于给定的项目列表在集合中搜索

C# 基于给定的项目列表在集合中搜索,c#,linq,search,C#,Linq,Search,假设给我一个列表作为输入: IList<string> availableFruits = {orange, banana} 我们定义了一些水果: var f1 = new Fruit { Id = 1, name = "apple" }; var f2 = new Fruit { Id = 2, name = "banana" }; var f3 = new Fruit { Id = 3, name = "orange" }; var f4 = new Fruit { Id =

假设给我一个列表作为输入:

IList<string> availableFruits = {orange, banana}
我们定义了一些水果:

var f1 = new Fruit { Id = 1, name = "apple" };
var f2 = new Fruit { Id = 2, name = "banana" };
var f3 = new Fruit { Id = 3, name = "orange" };
var f4 = new Fruit { Id = 4, name = "pineapple" };
最后,我们有一份菜单,上面有这些水果:

public class Menu
{
    public int ID { get; set; }
    public ICollection<Fruit> fruits;
}

var menus = new List<Menu>
{
    new Menu {ID = 0, fruits = new List<Fruit> { f1, f2 } },
    new Menu {ID = 1, fruits = new List<Fruit> { f1, f3, f4 } },
    new Menu {ID = 2, fruits = new List<Fruit> { f1, f4 } },
    new Menu {ID = 3, fruits = new List<Fruit> { f2 } },
};
公共类菜单
{
公共int ID{get;set;}
公众收集水果;
}
变量菜单=新列表
{
新菜单{ID=0,水果=新列表{f1,f2},
新菜单{ID=1,水果=新列表{f1,f3,f4},
新菜单{ID=2,水果=新列表{f1,f4},
新菜单{ID=3,水果=新列表{f2},
};

我需要一个LINQ查询,它在菜单中搜索并返回所有包含在AvailableFruits列表中传递的“任意”水果的菜单。因此,在这种情况下,它将返回ID为0、1和3的菜单。

以这种方式查看:保留
水果
属性中的任何水果在
可用的菜单

var availables = menus.Where(m => m.fruits.Any(f => availableFruits.Contains(f.name)));
请参阅下面的代码:

public IEnumerable<Menu> select_menus(IEnumerable<Menu> menus, IEnumerable<Fruit> fruits) {
   return menus.Where(m => m.fruits.Intersect(fruits).Any());
}
public IEnumerable选择菜单(IEnumerable菜单,IEnumerable水果){
返回菜单。其中(m=>m.fruits.Intersect(fruits.Any());
}

您试过什么吗?张贴你的努力和对你不起作用的东西。是的,我尝试了一些事情,但忽略了这些细节,以使问题易于跟进。你应该张贴你尝试过的东西。所以,我来这里不是为了帮你工作,而是为了帮助你从某些事情中解脱出来。谢谢你的努力。我也有过类似的经历,但就是不能用Any和Contains来概括我的想法。。。
public IEnumerable<Menu> select_menus(IEnumerable<Menu> menus, IEnumerable<Fruit> fruits) {
   return menus.Where(m => m.fruits.Intersect(fruits).Any());
}