簡體   English   中英

如何比較Linq查詢中的2個列表?

[英]How to compare 2 Lists in Linq Query?

我有數據庫模型

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>

在字典包含所有這些成分的地方獲得所有菜餚。 當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查詢。

嘗試

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

其中!ingredients.Except(dish.Ingredients).Any()檢查請求列表中的所有配料是否都包含在菜品的配料中。

您可以在這里進行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM