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

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

订购
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:这个跑步和跑步 – 像我这样的新手可能会发现这个链接问题的答案也很有用。

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

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

如果需要它作为List则调用ToList()

您需要System.Linq的using指令。

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

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

我更喜欢这种方式:

Order实现IEqualityComparer接口(只是为了正确比较它们)。

然后就做:

 IEnumerable myDistinctOrders = oredersList.Distinct();