Lambda表达式为列表中的每个不同的值返回一个结果



我目前有一个类对象的大列表,我目前使用下面的lambda函数来返回满足条件的元素。

var call = callList.Where(i => i.ApplicationID == 001).ToList();

这将返回id都为001的对象列表。

我现在很好奇有什么不同的applicationid。所以我想要一个lambda函数,它将查看这个列表并返回一个列表,其中所有元素都有不同的ApplicationID,但只获取其中一个。

如果我理解你的问题,你可以试试:

var list = callList.GroupBy(x => x.ApplicationID).Select(x => x.First()).ToList();

如果你有这样一个列表:

AppID:1, AppID:1, AppID:2, AppID:2, AppID:3, AppID:3

将返回:

AppID:1 AppID:2 AppID:3

您可以使用First或FirstOrDefault返回一个结果

var call = callList.First(i => i.ApplicationID == 001);

如果ApplicationID为001的调用不存在,这将抛出异常。如果预期会出现这种情况,可以考虑使用:

var call = callList.FirstOrDefault(i => i.ApplicationID == 001);

在这里,如果不存在这样的调用,则返回null,您可以在代码中相应地处理。

要查找存在的其他ApplicationId,您可以查询:

var Ids = callList.Where(i => i.ApplicationID != 001).Select(i => i.ApplicationID).Distinct();

你在说

我现在很好奇有什么不同的applicationid。所以我想要一个lambda函数来查看这个列表并返回吗一个列表,其中所有元素都有不同的ApplicationID,但只有获取其中一个。

我想说的是,这绝对不是你真正想要的。你要么不关心元素,你关心所有元素,要么你关心一个特定的元素。很少(没有?)情况下,您需要从列表中随机选择一个。

如果不知道你关心的具体是哪个版本,我无法给你那个版本的解决方案。alesandro已经给了你一个随机的解决方案。

当你只关心不同的ID时,你最终会得到

callList.Select(c => c.ApplicationID).Distinct()

给你所有的applicationid

如果你关心所有的,你最终会得到

callList.GroupBy(c => c.ApplicationID)

这将给你一个IEnumerable<IGrouping<String, Thingy>>(其中Thingy是callList元素类型的类型)

这意味着您现在有一个ApplicationID -> collection of Thingy's的集合。对于每个不同的ApplicationID,您将有一个"列表"(实际上是IEnumerable)的每个元素,具有该ApplicationID

如果您关心的Thingy -例如-具有属性Foo的最低值,您将希望

callList.GroupBy(c => c.ApplicationID)
        .Select(group => group.OrderBy(thingy => thingy.Foo).First()))

在这里你首先通过ApplicationID,然后为每一个事物的列表与样例ApplicationID你选择他们中的第一个如果你顺序他们通过Foo

有一种方法可以在查询中使用Distinct,但它会使您注意值的相等性。让我们假设您的类型名为CallClass,并尝试:

class CallClass : IEqualityComparer<CallClass>
{
    public int ApplicationId { get; set; }
    //other properties etc.
    public bool Equals(CallClass x, CallClass y)
    {
        return x.ApplicationId == y.ApplicationId;
    }
    public int GetHashCode(CallClass obj)
    {
        return obj.GetHashCode();
    }
}

现在你可以清楚地查询值了:

var call = callList.Distinct().ToList();

相关内容

  • 没有找到相关文章

最新更新