gpt4 book ai didi

c# - 使用 LINQ 获取列表中的项目

转载 作者:太空宇宙 更新时间:2023-11-03 20:04:17 27 4
gpt4 key购买 nike

我正在使用 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 语句来获取所有具有特定用户名的 MapLocations。

我上面的代码有效,但我需要一些帮助来将其编码为 LINQ 语句。

最佳答案

如果我没记错的话

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<T> .

关于c# - 使用 LINQ 获取列表中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24817623/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com