C# 分组列表中的第一项不使用Lambda';s

C# 分组列表中的第一项不使用Lambda';s,c#,list,lambda,distinct,C#,List,Lambda,Distinct,假设我有一个带有“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

假设我有一个带有“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();

这行得通吗?

您可以简单地迭代集合,记住您看到的所有名称,并且无论何时看到新名称,都可以使用id

var seen = new HashSet<string>();
foreach (var item in items)
{
    if (!seen.Add(item.name))
    {
        Console.WriteLine(item.id);
    }
}
var seen=newhashset();
foreach(项目中的var项目)
{
如果(!seen.Add(item.name))
{
控制台写入线(项目id);
}
}
输出:

1 3 5 1. 3. 5.
您可以简单地迭代集合,记住您看到的所有名称,并且每当您看到一个新名称时,获取id

var seen = new HashSet<string>();
foreach (var item in items)
{
    if (!seen.Add(item.name))
    {
        Console.WriteLine(item.id);
    }
}
var seen=newhashset();
foreach(项目中的var项目)
{
如果(!seen.Add(item.name))
{
控制台写入线(项目id);
}
}
输出:

1 3 5 1. 3. 5.
此解决方案非常有效:

(from t in this.ObjectContext.MYTABLE
group t by t.UniqueIdentifier into theGroup
select theGroup.First()).ToList();

此解决方案非常有效:

(from t in this.ObjectContext.MYTABLE
group t by t.UniqueIdentifier into theGroup
select theGroup.First()).ToList();

抱歉,不能假定它们是相邻的。我给出了一个简单的列表,但实际的列表要大得多。@James P.Wright:在这种情况下,所有的名字都需要记住,而不仅仅是最后一个。答案也相应地更新了。我意识到LINQ只是相当于Lambda的,但我被允许使用LINQ。您的解决方案可以工作,但我的解决方案适合我现有的代码。无论如何谢谢你!抱歉,不能假定它们是相邻的。我给出了一个简单的列表,但实际的列表要大得多。@James P.Wright:在这种情况下,所有的名字都需要记住,而不仅仅是最后一个。答案也相应地更新了。我意识到LINQ只是相当于Lambda的,但我被允许使用LINQ。您的解决方案可以工作,但我的解决方案适合我现有的代码。无论如何谢谢你!这是一条极其愚蠢的规则。尽你所能摆脱它。LINQ语法只是lambdas的语法糖。如果您想要100%无lambda代码,就不能使用LINQ。调用
GroupBy().Distinct()
@Slaks没有任何意义:同意规则,不要让我开始。也就是说,你认为我的编辑解决方案行得通吗?显然我真的变傻了。我发布的LINQ非常容易用我自己的例子进行测试。这是一条非常愚蠢的规则。尽你所能摆脱它。LINQ语法只是lambdas的语法糖。如果您想要100%无lambda代码,就不能使用LINQ。调用
GroupBy().Distinct()
@Slaks没有任何意义:同意规则,不要让我开始。也就是说,你认为我的编辑解决方案行得通吗?显然我真的变傻了。我发布的LINQ非常容易用我自己的例子进行测试。嗯。