我想使用LINQ查询更新两个列表。我有一个IDictionary<>
值,其中包含ID和值。我想更新另一个带有相关值的相关ID的列表。
public void UpdateList(IDictionary<int, int> sortOrder)
{
var current = GetList();
foreach (var item in current)
{
foreach (var i in sortOrder)
{
if (item.Id == i.Key)
{
item.SortOrder = i.Value;
}
}
}
}
我提出了这个解决方案。但是我需要使用LINQ以更有效的方式做。
答案 0 :(得分:3)
您可以通过执行字典查找来避免嵌套循环:
public void UpdateList(IDictionary<int, int> sortOrder)
{
var current = GetList();
foreach (var item in current)
{
int value;
if (sortOrder.TryGetValue(item.Id, out value))
{
item.SortOrder = value;
}
}
}
那不是使用LINQ,但由于LINQ是查询而不是更新,我不确定LINQ将如何帮助......
答案 1 :(得分:0)
这是LINQ解决方案:
public void UpdateList(IDictionary<int, int> sortOrder)
{
var current = GetList();
current= (from c in current
join i in sortOrder on c.Id equals i.Key into lg
from i in lg.DefaultIfEmpty()
select new /*Your Class Name*/{Id=c.Id, SortOrder=i==null?c.SortOrder:i.Value}).ToList();
}
更新:LEFT JOIN优于Inner Join。