我有一个名为MyConnection的对象,其属性为Sources属于List类型我无法编写linq代码来查找列表中连接源为“”的所有MyConnections。
我尝试了这个,但它似乎没有运行..
MyConnection initialActivity = currentActivities.ToList().Where(x => x.Sources.Contains(String.Empty));
答案 0 :(得分:1)
Where
会返回IEnumerable<MyConnection>
而不是MyConnection
个foreach
。因此,您可以在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
对此进行操作,或者在其上调用ToList
或ToArray
以获取列表或数组。
N.B。您可能不需要在此行的中间中调用.ToList()
。