我有一个名为 MyConnection 的对象,其属性为 List 类型的 Sources 我无法编写 linq 代码来查找 List 中连接的 Source 为“”的所有 MyConnections。
我试过这个,但它似乎没有运行..
MyConnection initialActivity = currentActivities.ToList().Where(x => x.Sources.Contains(String.Empty));
我有一个名为 MyConnection 的对象,其属性为 List 类型的 Sources 我无法编写 linq 代码来查找 List 中连接的 Source 为“”的所有 MyConnections。
我试过这个,但它似乎没有运行..
MyConnection initialActivity = currentActivities.ToList().Where(x => x.Sources.Contains(String.Empty));
Where
返回一个IEnumerable<MyConnection>
not a MyConnection
。因此,您可以在 a 中枚举所有内容foreach
或将 fe 与First
.
IEnumerable<MyConnection> allWithEmptySource = currentActivities
.Where(con => con.Sources.Any(s => string.IsNullOrEmpty(s)));
if(allWithEmptySource.Any())
{
MyConnection first = allWithEmptySource.First();
}
.Where()
返回匹配元素的序列。
您不能将其分配给 type 的变量MyConnection
。
相反,您可以调用方法.Last()
来获取单个元素。
如果您只是想获得一个具有“”来源的活动,而不是所有活动,请使用
MyConnection initialActivity = currentActivities.ToList()
.FirstOrDefault(x => x.Sources.Contains(String.Empty));
如果没有这样的活动,它会给你null
,如果有一个或多个,那就是第一个。
或者FirstOrDefault
,使用:
First
给你第一个但如果没有则抛出异常Single
给你一个匹配并抛出一个异常,有 0 或 >1 个匹配SingleOrDefault
给你一个匹配或不匹配,如果有>1个匹配,则抛出异常。如果你想要所有这些,你的返回类型将是一个IEnumerable<MyConnection>
,而不是一个:
IEnumerable<MyConnection> initialActivities = = currentActivities.ToList()
.Where(x => x.Sources.Contains(String.Empty));
然后,您可以foreach
在此之上,或调用ToList
或ToArray
在其上获取列表或数组。
NB 你可能不需要.ToList()
在你的线路中间打电话。