0

我对 LINQ 和编程有点陌生。我想要做的是将两个不同的列表放在一起,而不是使用两个 foreache-loops 我想用 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);
            }

所以这就是它的样子,现在它需要从网站上大量“记忆”才能在谷歌地图上列出,所以我认为你可以用更好的解决方案来做到这一点。谢谢你的时间

4

3 回答 3

1

您可以尝试的一种方法是使用类似于下面给出的 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
                     };
于 2013-10-15T07:37:26.447 回答
0

我不确定在您的示例中如何做到这一点,因为您使用第一个列表来获取需要进入其他列表的数据。我不知道您的 GetCoutry 方法是做什么的,但如果它经常在 DB 上运行,或者您正在调用其他服务,这可能是您的瓶颈。不要为每个用户重复执行操作,而是尝试通过一次调用列表中的所有用户来获取所有国家/地区。

于 2013-10-15T07:26:45.743 回答
0

试试这个 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
             }));
    });
于 2013-10-15T07:56:29.797 回答