我有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个社区组同时具有CommunityID和CommunityName。 List2包含5个具有CommunityID和空白CommunityNames的CommunityGroup。我需要在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替换这些代码。请有人帮助我。
由于
答案 0 :(得分:4)
您可以使用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;
答案 1 :(得分:2)
您可以只过滤第一个列表中的行,因为它包含ID和名称,其中id位于第二个列表中,并创建新列表或将其分配给List2。
List2 = List1.Where( x => List2.Contains(x.Id)).ToList();
您也可以从list1和list2进行连接,然后选择名称和说明。比较性能并选择您喜欢的任何方法。
答案 2 :(得分:2)
var newList = List2.Foreach( x => x.Name = List1.First(m => m.Id == x.Id).Name);
答案 3 :(得分:1)
foreach (CommunityGroups t1 in List2)
{
foreach (var t in List1.Where(t => t1.GroupId == t.Id))
{
t1.GroupName = t.Name;
}
}
答案 4 :(得分:1)
翻译(更改名称以便它们与类定义匹配)和最大化的linq:
foreach (CommunityGroups t in List2)
{
foreach (CommunityGroups t1 in List1.Where(t1 => t.GroupId == t1.GroupId))
{
t.GroupName = t1.GroupName;
}
}
答案 5 :(得分:1)
试试这个:
var query =
from l1 in List1
join l2 in List2
on l1.CommunityID equals l2.CommunityID
select l2;
答案 6 :(得分:1)
通常,LINQ语句不包含副作用。
但是,可以编写如下语句:
list2.Join(list1,
l2 => l2.CommunityID,
l1 => l1.CommunityID,
(item2, item1) =>
{
item2.CommunityName = item1.CommunityName;
return item2;
}
).ToList();
我会推荐foreach
方法,因为它传达了可变性的正确含义。
答案 7 :(得分:1)
您可以将第一个列表转换为字典,其中id为key,名称为value:
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];