0

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

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

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

3 回答 3

1

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();
}
于 2012-12-13T16:26:02.340 回答
0

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

您不能将其分配给 type 的变量MyConnection

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

于 2012-12-13T16:20:41.893 回答
0

如果您只是想获得一个具有“”来源的活动,而不是所有活动,请使用

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在此之上,或调用ToListToArray在其上获取列表或数组。

NB 你可能不需要.ToList()在你的线路中间打电话。

于 2012-12-13T16:23:02.410 回答