Я заранее извиняюсь, если моя терминология здесь не годится, я все еще новичок в asp.net.

У меня есть такая модель:

public class Order
{
    public int FoodId { get; set; }
    public int Amount { get; set; }
}

У меня есть список заказов, для которых я хочу создать копию, которая содержит только один элемент для FoodId. Так что, если у меня есть это:

1, 5
2, 3
1, 2
2, 6
3, 1

И я хочу получить такой список:

1, 5
2, 3
3, 1

То, что находится внутри суммы, для меня не имеет значения, я просто хочу увидеть список всех уникальных FoodIds, которые есть в первом списке. Я бы предпочел использовать лямбда-функцию, например так (не реальный код, очевидно):

List<Models.Order> FoodList = new List<Models.Order>(
    OrderList.ForEach(o => FoodList.FindAll(if(o.FoodId not in Foodlist) return o))
);
1
noClue 1 Мар 2018 в 13:33

4 ответа

Лучший ответ

Вы, вероятно, должны использовать метод GroupBy, например так:

OrderList.GroupBy(x => x.FoodId).Select(g => g.First()).ToList();
7
Ousmane D. 1 Мар 2018 в 11:14

Если вас интересуют только уникальные идентификаторы продуктов, вы можете сначала выбрать их и использовать Distinct, например:

OrderList.Select(x => x.FoodId).Distinct();
3
Markus 1 Мар 2018 в 10:37

Вы можете реализовать пользовательский компаратор

public class CustomComparer : IEqualityComparer<Order>
    {
        public bool Equals(Order x, Order y)
        {
            return x.FoodId == y.FoodId;
        }

        public int GetHashCode(Order obj)
        {
            return obj.FoodId.GetHashCode();
        }
    }

И передать его в метод Distinct ()

var newList = FoodList.Distinct(new CustomComparer()).ToList();
0
Jack Sparrow 1 Мар 2018 в 10:57

Вы можете использовать Different (), чтобы решить эту проблему

Как ниже

yourlist.Select(x => x.FoodId).Distinct();
0
Dipak Parekh 1 Мар 2018 в 10:40