【问题标题】:How to compare 2 Lists in Linq Query?如何比较 Linq 查询中的 2 个列表?
【发布时间】:2017-10-24 07:45:54
【问题描述】:

我有数据库模型

public class Dish
    {
        public int Id { get; set; }
        public String Name { get; set; }
        public Dictionary<Ingridient, int> Ingridients { get; set; }
        public List<String> Images { get; set; }
        public String  Guide { get; set; }
        public Guid User { get; set; }
        public DishType dishType { get; set; }
        public int Rate { get; set; }

        public enum DishType
        {
            Polish,
            Asian,
            Indian,
            Other
        };
    }

我想从List&lt;Ingridient&gt; 获得所有含有配料的菜肴。类似的东西

输入List&lt;Ingridient&gt;

获取 Dictionary 包含所有这些成分的所有菜肴。虽然 Ingridient 是关键。

我尝试了一些适用于数据库中所有菜肴的慢速解决方案,但我想转向查询数据库以使其更快。

我的解决方案 - 非常慢并且占用大量内存:

List<Dish> allDishes = Dishes.Select(n => n).ToList();
            List<Dish> Found = new List<Dish>();
            foreach(var d in allDishes)
            {
                List<Ingridient> fromDish = d.Ingridients.Keys.ToList();

                foreach(var ing in ingridients)
                {
                    if (!fromDish.Contains(ing))
                        break;
                }

                Found.Add(d);
            }

我想将此行为重新创建为 Linq 查询。

【问题讨论】:

  • 我已尝试寻找解决方案,但尚未找到任何有用的信息。我试图想出自己的 Linq,但老实说这对我来说太复杂了。
  • 我已经编辑了我的问题。如果缺少某些东西或有什么问题,我会感谢您帮助修复它。

标签: c# entity-framework list linq dictionary


【解决方案1】:

试试

dishes.Where(dish => !ingredients.Except(dish.Ingredients).Any()).ToList();

!ingredients.Except(dish.Ingredients).Any() 检查请求列表中的所有成分是否都包含在菜肴的成分中。

你可以摆弄一个测试here

【讨论】:

  • 谢谢,我已经尝试了几个我自己的 linq,但我无法得到结果。我也不知道我在var foundDishes = Dishes.Where(dish =&gt; dish.Ingridients.Keys.ToList().Exists(ing =&gt; ingridients.Contains(ing))).ToList();做错了什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 2015-08-30
  • 2015-12-01
相关资源
最近更新 更多