簡體   English   中英

使用LINQ在C#中將兩個列表放在一起

[英]Putting two lists together in C# using LINQ

我對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);
            }

所以這是它的樣子,現在它需要大量“內存”才能在Google地圖上列出這些內容,因此我認為您可以使用更好的解決方案來做到這一點。 謝謝你的時間

您可以嘗試的一種方法是使用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的方法會做什么,但是如果它經常在DB上運行或者正在調用其他服務,那可能就是您的瓶頸。 與其對每個用戶重復執行操作,不如嘗試對列表中的所有用戶進行一次呼叫來獲取所有國家。

試試這個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
             }));
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM