使用 LINQ 在 C# 中将两个列表放在一起
本文关键字:两个 列表 在一起 LINQ 使用 | 更新日期: 2023-09-27 18:35:27
我对LINQ和编程有点陌生。我想做的是将两个不同的列表放在一起,这样我就想通过 Linq 获取信息,而不是使用两个预循环。我将向您展示我的代码示例:
Country c = CountriesHandler.GetCountry(startPage.SelectedCountry);
if (globalSite)
{
List<Marker> markersForGlobal = new List<Marker>();
foreach (var user in userList)
{
Country ce = CountriesHandler.GetCountry(user.GetAttributeValue<string>("Country"));
foreach (var u in photoWithInfo)
{
if (user.ID == u.UserID)
{
int id = u.UserID;
string im = u.SquareThumbnailUrl;
markersForGlobal.Add(new Marker
{
Id = id,
Image = im,
Longitude = ce.Longitude,
Latitude = ce.Latitude
});
break;
}
}
}
return Json(markersForGlobal);
}
所以这就是它的样子,现在需要大量的"内存"才能在谷歌地图上列出它,所以我认为你可以用更好的解决方案来做到这一点。感谢您抽出宝贵时间
您可以尝试的一种方法是使用类似于下面给出的 LINQ 查询。一个缺点是GetCountry被调用了两次。
var result = from pwi in photoWithInfo
join user in userList on pwi.UserId equals user.UserId
select new Marker()
{
Id = user.UserId,
Image = pwi.SquareThumbnailUrl,
Longitude = CountriesHandler.GetCountry(user.GetAttributeValue<string>("Country")).Longitude,
Latitude = CountriesHandler.GetCountry(user.GetAttributeValue<string>("Country")).Latitude
};
我不确定在您的示例中如何完成此操作,因为您使用第一个列表来获取需要进入其他列表的数据。我不知道您的 GetCoutry 方法是什么,但如果它经常在数据库上发生,或者如果您正在调用另一个服务,这可能是您的瓶颈。与其为每个用户重复执行操作,不如尝试通过一次呼叫列表中所有用户来获取所有国家/地区。
试试这个linq,我不认为它会减少内存,但可以肯定的是,它更优雅:)
var markers = new List<Marker>();
userList.ForEach(user =>
{
var country = CountriesHandler
.GetCountry(user.GetAttributeValue<string> ("Country"));
markers.AddRange(photoWithInfo.Where(info => user.Id == info.UserID)
.Select(info => new Marker
{
Id = info.UserID,
Image = info.SquareThumbnailUrl,
Latitude = country.Latitude,
Longitude = country.Longitude
}));
});