如何比较Linq Query中的2个列表?

时间:2017-10-24 07:45:55

标签: c# entity-framework list linq dictionary

我有数据库模型

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<Ingridient>获得所有有问题的菜肴。像

这样的东西

输入List<Ingridient>

获取所有词典包含所有这些ingridients的Dishes。虽然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查询。

1 个答案:

答案 0 :(得分:1)

尝试

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

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

你可以摆弄测试here