从具有集合Linq的属性中筛选集合

时间:2012-12-13 16:18:15

标签: linq

我有一个名为MyConnection的对象,其属性为Sources属于List类型我无法编写linq代码来查找列表中连接源为“”的所有MyConnections。

我尝试了这个,但它似乎没有运行..

MyConnection initialActivity = currentActivities.ToList().Where(x => x.Sources.Contains(String.Empty));

3 个答案:

答案 0 :(得分:1)

Where会返回IEnumerable<MyConnection>而不是MyConnectionforeach。因此,您可以在First中枚举所有内容,或者只需要一个f.e.与IEnumerable<MyConnection> allWithEmptySource = currentActivities .Where(con => con.Sources.Any(s => string.IsNullOrEmpty(s))); if(allWithEmptySource.Any()) { MyConnection first = allWithEmptySource.First(); }

{{1}}

答案 1 :(得分:0)

.Where()会返回匹配元素的序列

您无法将其分配给MyConnection类型的变量。

相反,您可以调用.Last()之类的方法来获取单个元素。

答案 2 :(得分:0)

如果您只是尝试获取一个活动,而该活动的源代码为“”,而不是所有,请使用

MyConnection initialActivity = currentActivities.ToList()
    .FirstOrDefault(x => x.Sources.Contains(String.Empty));

如果没有这样的活动,它会给你null,如果有一个或多个活动,它会给你第一个。

FirstOrDefault外,请使用:

  • First给你第一个但如果没有
  • 则抛出异常
  • Single为您提供一场比赛并抛出0或者&gt; 1场比赛的例外
  • SingleOrDefault为您提供一次匹配或不匹配,如果有> 1次匹配,则抛出和例外。

如果你想要所有,那么你返回的类型将是IEnumerable<MyConnection>,而不是一个:

IEnumerable<MyConnection> initialActivities = = currentActivities.ToList()
    .Where(x => x.Sources.Contains(String.Empty));

然后,您可以foreach对此进行操作,或者在其上调用ToListToArray以获取列表或数组。

N.B。您可能需要在此行的中间中调用.ToList()

相关问题