如果我的术语不在此处,我提前道歉,我还是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的列表。我更喜欢使用lambda函数,就像这样(显然不是真正的代码):
List<Models.Order> FoodList = new List<Models.Order>(
OrderList.ForEach(o => FoodList.FindAll(if(o.FoodId not in Foodlist) return o))
);
答案 0 :(得分:7)
您可能应该使用GroupBy
方法,如下所示:
OrderList.GroupBy(x => x.FoodId).Select(g => g.First()).ToList();
答案 1 :(得分:3)
如果您只对独特的食物ID感兴趣,您可以先选择它们,然后使用Distinct
方法,例如:
OrderList.Select(x => x.FoodId).Distinct();
答案 2 :(得分:0)
您可以使用distinct()来解决此问题
如下所示
yourlist.Select(x => x.FoodId).Distinct();
答案 3 :(得分:0)
您可以实现自定义比较器
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();