【问题标题】:Search inside a collection based on a given list of items根据给定的项目列表在集合内搜索
【发布时间】:2016-03-31 19:36:49
【问题描述】:

假设我得到了一个列表作为输入:

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 查询,它在菜单中搜索并返回所有菜单,其中包含在可用水果列表中传递的“任何”水果。因此在这种情况下,它将返回 ID 为 0、1 和 3 的菜单。

【问题讨论】:

  • 你有没有尝试过?发布您的努力以及不适合您的内容。
  • 是的,我已经尝试了一些方法,但为了让问题易于理解而忽略了这些细节
  • 您应该发布您尝试过的内容。 SO 不是在这里为您工作,而是帮助您摆脱困境。

标签: c# linq search


【解决方案1】:

这样看:保留fruits属性中的任何水果在availableFruits中的菜单:

var availables = menus.Where(m => m.fruits.Any(f => availableFruits.Contains(f.name)));

【讨论】:

  • 感谢工作。我有类似的事情发生,但无法将 Any 和 Contains 一起使用...
【解决方案2】:

请看下面的代码:

public IEnumerable<Menu> select_menus(IEnumerable<Menu> menus, IEnumerable<Fruit> fruits) {
   return menus.Where(m => m.fruits.Intersect(fruits).Any());
}

【讨论】:

    猜你喜欢
    • 2019-09-09
    • 1970-01-01
    • 1970-01-01
    • 2019-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2011-06-09
    相关资源
    最近更新 更多