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; }
}

在这些列表中,List1 10 个 CommunityGroups 同时具有 CommunityID 和 CommunityName。List2 包含 5 个具有 CommunityID 和空白 CommunityNames 的社区组。我需要在 List2 中填充关于 List1 的 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

4

您可以使用 a 查询这两个列表join,然后遍历枚举对进行赋值:

var combineditems = from item1 in List1
                    join item2 in List2
                    on item1.Id equals item2.GroupId
                    select new { item1 , item2  };

foreach(var items in combineditems)
    items.item2.GroupName  = items.item2.Name;
于 2013-09-23T13:06:36.517 回答
2

您可以只过滤第一个列表中的行,因为它同时包含 Id 和 Name,其中 id 在第二个列表中,并创建一个新列表或将其分配给 List2。

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

您还可以从 list1 和 list2 进行连接,然后选择名称和描述。在性能方面进行比较并选择您喜欢的任何方法。

于 2013-09-23T12:59:44.600 回答
2
var newList = List2.Foreach( x => x.Name = List1.First(m => m.Id == x.Id).Name);
于 2013-09-23T13:01:59.800 回答
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 回答
1

试试这个:

var query =
     from l1 in List1
     join l2 in List2
          on l1.CommunityID equals l2.CommunityID
     select l2;
于 2013-09-23T13:07:25.707 回答
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

您可以将第一个列表转换为以 id 为键、名称为值的字典:

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 回答