假设我有一个带有“id”和“name”的对象。我的清单是这些项目:
id = 1, name = "Bob"
id = 2, name = "Bob"
id = 3, name = "Chris"
id = 4, name = "Chris"
id = 5, name = "Paul"
如何获得该列表的一个子集,它将返回第1,3和5项(即第一次出现的名称),但特别是没有Lambda。
我认为这是Lambda解决方案
items.GroupBy(item => item.UniqueIdentifier).Distinct().Select(item => item.First()).ToList();
但我特别禁止在这个解决方案中使用Lambda(不,这不是在学校......这是在实际的工作环境中)
修改
我刚刚意识到我可以在我的LINQ语句中执行此操作,该语句通过此代码获取此列表。
(from t in this.ObjectContext.MYTABLE
group t by t.UniqueIdentifier into theGroup
select theGroup.First()).ToList();
那会有用吗?
答案 0 :(得分:3)
你可以简单地迭代这个集合,记住你看过的所有名字,每当你看到一个新名字时,都要拿这个id。
var seen = new HashSet<string>();
foreach (var item in items)
{
if (!seen.Add(item.name))
{
Console.WriteLine(item.id);
}
}
输出:
1 3 5
答案 1 :(得分:0)
此解决方案完美无缺:
(from t in this.ObjectContext.MYTABLE
group t by t.UniqueIdentifier into theGroup
select theGroup.First()).ToList();