基于给定的项目列表在集合内搜索

时间:2016-03-31 19:36:50

标签: c# linq search

让我说我有一个列表作为输入:

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的菜单。

2 个答案:

答案 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());
}