1

私は2つのクラスリストを持っています、

List<CommunityGroups> List1=new List<CommunityGroups>();
List<CommunityGroups> List1=new List<CommunityGroups>();

public class CommunityGroups
{
    public long CommunityID { get; set; }
    public string CommunityName { get; set; }
}

これらのリストでは、CommunityID と CommunityName の両方を持つ 10 個の CommunityGroups を List1 します。List2 には、CommunityID と空白の CommunityNames を持つ 5 つの CommunityGroups が含まれています。List1 に関して、List2 に CommunityNames を入力する必要があります。今私はコードを使用しています、

for (int i = 0; i < List2.Count; i++)
    {
        for (int j = 0; j < List1.Length; j++)
        {
            if (List2[i].GroupId == List1[j].Id)
            {
                List2[i].GroupName = List1[j].Name;
            }
        }
    }

}

この目的のためにlinqクエリを使用する必要があります。これらのコードを linq に置き換えるにはどうすればよいですか。誰か助けてください。

ありがとう

4

8 に答える 8

2

最初のリストには ID と名前の両方が含まれているため、最初のリストから行をフィルタリングして、新しいリストを作成するか、List2 に割り当てることができます。

List2 = List1.Where( x => List2.Contains(x.Id)).ToList();

list1 と list2 を結合してから、名前と説明を選択することもできます。パフォーマンスの面で比較し、好きな方法を選択してください。

于 2013-09-23T12:59:44.600 に答える
1

id をキー、name を値として、最初のリストを辞書に変換できます。

var names = List1.ToDictionary(l1 => l1.CommunityID, l1 => l1.CommunityName);
foreach (var l2 in List2)
    if (names.ContainsKey(l2.CommunityID))
        l2.CommunityName = names[l2.CommunityID];
于 2013-09-23T13:30:31.293 に答える
1

一般に、LINQ ステートメントには副作用がありません。

ただし、次のようなステートメントを記述することは可能です。

list2.Join(list1,
           l2 => l2.CommunityID,
           l1 => l1.CommunityID,
           (item2, item1) =>
               {
                   item2.CommunityName = item1.CommunityName;
                   return item2;
               }
           ).ToList();

foreach可変性の正しい意味を伝えるため、このアプローチをお勧めします。

于 2013-09-23T13:14:42.563 に答える
1
 foreach (CommunityGroups t1 in List2)
        {
            foreach (var t in List1.Where(t => t1.GroupId == t.Id))
            {
                t1.GroupName = t.Name;
            }
        }
于 2013-09-23T13:00:49.940 に答える
1

最大化されたlinqを使用した翻訳(クラス定義と一致するように名前を変更):

foreach (CommunityGroups t in List2)
{
    foreach (CommunityGroups t1 in List1.Where(t1 => t.GroupId == t1.GroupId))
    {
        t.GroupName = t1.GroupName;
    }
}
于 2013-09-23T13:00:50.750 に答える