我有一个对象列表 - 让我们说它们是订单。
顺序
OrderID
Date
SalesmanId
...
我想从此列表中提取Distinct
个SalesmanId
列表。做这个的最好方式是什么?我不认为它是通过手动循环...是吗?
更新 谢谢你的回复。我想到了一个额外的要求(在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的答案也很有用。
答案 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();