使用linq更新两个列表

时间:2014-08-08 06:59:00

标签: c# sql linq

我想使用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以更有效的方式做。

2 个答案:

答案 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。