我应该如何从List <t>自定义对象中提取不同值的集合?</t>

时间:2011-06-07 13:36:43

标签: c# asp.net linq list lambda

我有一个对象列表 - 让我们说它们是订单。

顺序
OrderID
Date
SalesmanId
...

我想从此列表中提取DistinctSalesmanId列表。做这个的最好方式是什么?我不认为它是通过手动循环...是吗?

更新 谢谢你的回复。我想到了一个额外的要求(在Jon Skeets回答之后概述),并将其编码为:

var salesusers = from s in lstOrders 
                 group s by new { s.SalesUserId,s.Username} 
                 into g  
                 select new { UserName = g.Key.Username, UserId = g.Key.SalesUserId };

它有效,但我不确定这是否是正确的方法,或者我是否偏离了标记?

感谢。

更新#2: 这个跑步和跑步 - 像我这样的新手可能会发现这个linked question的答案也很有用。

2 个答案:

答案 0 :(得分:11)

如果您只需要获得SalesmanIds,那很简单:

var salesmanIds = orders.Select(x => x.SalesmanId)
                        .Distinct();

如果您需要ToList(),请致电List<T>

您需要System.Linq的使用指令。

编辑:好的,要获得名称和ID,您可以使用:

var salesmanIds = orders.Select(x => new { x.SalesmanId, x.UserName })
                        .Distinct();

答案 1 :(得分:3)

我更喜欢这种方式:

订单实施IEqualityComparer<T>界面(只是为了正确比较它们。

然后就这样做:

IEnumerable<Order> myDistinctOrders = oredersList.Distinct();