首页 > 解决方案 > 是否可以从 .Any() 中获取找到的值?

问题描述

如果我使用 .Any() 检查列表/集合是否包含值,是否可以以某种方式使用这些值来避免调用单独的 .Where()?

例如:

if(thisList.Any(i => i.fieldCheck == thingToCheck)
{
    //use i here instead of thisList.Where(i => i.fieldCheck == thingToCheck)
}

为清楚起见进行编辑:我基本上将 .Any 用作空检查,以便我可以安全地使用 Where 的任何结果,而无需进行其他检查。而不是编写代码来分配一些东西给 .Where 我想使用在 .Any 中匹配的任何值

标签: c#linq

解决方案


不,但您可以使用foreach

foreach(var x in thisList.Where(i => i.fieldCheck == thingToCheck))
{
    //use x here 
}

如果您想在循环之后知道有匹配的值,您可以在其中初始化一个bool变量true。这不是很优雅但很有效,因为您只执行一次查询。

如果结果列表不大,您还可以将匹配项放入另一个列表中以使代码更好:

var matchingItemList = thisList.Where(i => i.fieldCheck == thingToCheck).ToList();
if(mattchingItemList.Any()) // efficient because the query is not executed again 
{
    // use matchingItemList, for example with a loop
}

如果您只期望一个匹配的项目,您可以使用FirstOrDefault

var x = thisList.FirstOrDefault(i => i.fieldCheck == thingToCheck);
if(x != null)
{
   // use x
}

推荐阅读