让我说我有一个列表作为输入:
IList<string> availableFruits = {orange, banana}
我有一个看起来像这样的水果实体:
public Fruit
{
public int ID { get; set; }
public string name { get; set; }
}
我们定义了一些水果:
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 } },
};
我需要一个LINQ查询,在菜单中搜索并返回包含avaiableFruits列表中传递的'ANY'水果的所有菜单。因此,在这种情况下,它将返回ID为0,1和3的菜单。
答案 0 :(得分:2)
以这种方式查看:保留fruits
属性中任何水果所在的菜单availableFruits
:
var availables = menus.Where(m => m.fruits.Any(f => availableFruits.Contains(f.name)));
答案 1 :(得分:0)
请参阅以下代码:
public IEnumerable<Menu> select_menus(IEnumerable<Menu> menus, IEnumerable<Fruit> fruits) {
return menus.Where(m => m.fruits.Intersect(fruits).Any());
}