【问题标题】:Use LINQ to get a items in a list使用 LINQ 获取列表中的项目
【发布时间】:2014-07-18 05:10:53
【问题描述】:

我正在使用 C# VS2013 Express,需要一些帮助来编写 LINQ 语句。

每个 MapCompany 都有一个 MapLocations 列表,并且 MapCompany 和 MapLocation 都有一个 userName 字段。

这是我的代码:

IEnumerable<CanFindLocation.Models.MapCompany> mapCompanies = await db.mapCompanies.Where(mc => mc.userName.Equals(userName)).ToListAsync();
List<MapLocation> mapLocations = new List<MapLocation>();
foreach (var mapCompany in mapCompanies)
{
    foreach (var mapLocation in mapCompany.mapLocations)
    {
        if (mapLocation.userName.Equals(userName))
        {
            mapLocations.Add(mapLocation);
        }
    }
}

我是 LINQ 的新手,想编写一个 LINQ 语句来获取所有具有特定用户名的 MapLocation。

我上面的代码可以工作,但我需要一些帮助来将其编码为 LINQ 语句。

【问题讨论】:

  • 你试过什么?

标签: c# linq list foreach ienumerable


【解决方案1】:

如果我没记错的话,

IEnumerable<CanFindLocation.Models.MapCompany> mapCompanies = await db.mapCompanies.Where(mc => mc.userName.Equals(userName)).ToListAsync();

var mapLocations = mapCompanies.SelectMany(mapCompany => mapCompany.mapLocations)
                               .Where(mapLocation => mapLocation.userName.Equals(username));

或者按照 Marcel B 在评论中的建议,查询语法:

var mapLocations = from mapCompany in mapCompanies
                   from mapLocation in mapCompany.mapCompanies
                   where mapLocation.userName.Equals(username)
                   select mapLocation;

当然,我会为这种情况以及其他任何可能的情况这样做,但如果您通常在编写这样的 LINQ 表达式时遇到问题,您也可以使用yield return 模式。同样,我不会在这里,但我也会包括在内。

public IEnumerable<MapLocation> GetLocations(IEnumerable<CanFindLocation.Models.MapCompany> mapCompanies)
{
    foreach (var mapCompany in mapCompanies)
    {
        foreach (var mapLocation in mapCompany.mapLocations)
        {
            if (mapLocation.userName.Equals(userName))
            {
                yield return mapLocation;
            }
        }
    }
}

显然这并不能回答您的问题,我的第一个代码块就是这样做的,但这仍然是一种更清洁且通常更好的方式,因为它可以让您从延迟性质中受益IEnumerable&lt;T&gt;.

【讨论】:

  • 也许可以为你的代码添加查询语法……当我刚接触 Linq 时,我发现查询语法更简单,因为它更接近 foreach 语法。
  • @MarcelB 好点。我总是忘记存在查询语法。我从不使用它。我说对了吗?
  • 看起来不错……我也从不使用它。至少现在没有了。但是查询语法激发了我对 Linq 的兴趣。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
相关资源
最近更新 更多