1

有没有办法(LINQ可能使用)我可以优化下面的代码。这段代码所做的是myFirstCollection通过比较变量中的项目来添加、删除和更新变量中的项目mySecondCollection。我能否以某种方式使用更多 LINQ 方法/查询或其他 LINQ 运算符,以便myFirstCollection尽快比较和更新变量。

为了满足我的要求,我的ObservableCollection变量myfirstCollection绑定到 ,WPF Grid以便添加、删除和更新通过数据绑定立即反映在网格中。

private void UpdateFirstCollection(ObservableCollection<MyDTO> myFirstCollection, IEnumerable<MyDTO> mySecondCollection)
{
//Code to add items to First Collection, how to optimize this block?
    foreach (var item in mySecondCollection.ToList())
    {
        if (!myFirstCollection.Contains(item))
        {
            myFirstCollection.Add(item);
        }
        else
        {
//Code to update items from First Collection, how to optimize this block?
            var itemToUpdate = myFirstCollection.FirstOrDefault(dto => dto.ID == item.ID);
            if (itemToUpdate != null)
            {
                itemToUpdate = item;
            }
        }
    }

//Code to remove items from First Collection, how to optimize this block?
    var copy = new ObservableCollection<myDTO>(myFirstCollection);
    foreach (var item in copy.ToList())
    {
        if (!mySecondCollection.Contains(item))
        {
            myFirstCollection.Remove(item);
        }
    }
}

非常感谢根据任何文章/链接重构/改进上述代码的任何帮助。

4

2 回答 2

0

也许我遗漏了一些东西,但既然你只是添加东西到myFirstCollection存在的mySecondCollection东西,然后删除不存在的东西,你mySecondCollection为什么不清除myFirstCollection并添加所有东西mySecondCollection呢?

private void UpdateFirstCollection(ObservableCollection<MyDTO> myFirstCollection, IEnumerable<MyDTO> mySecondCollection)
{
    myFirstCollection.Clear();
    foreach(var item in mySecondCollection)
    {
        myFirstCollection.add(item);
    }
}

请告诉我我是否过度简化了这一点。

于 2012-11-07T22:17:00.580 回答
0

您正在添加任何新项目、删除任何已删除的项目以及更新任何更改的项目。您实际上是在替换整个集合。

myFirstCollection = mySecondCollection;

ObservableCollection我知道从某个角度来看这可能是不可取的,所以相反

myFirstCollection.Clear();
foreach (var item in mySecondCollection)
    myFirstCollection.Add(item);
于 2012-11-07T22:17:23.850 回答