1

LINQ以下のコードを最適化できる (おそらく使用する) 方法はありますか。myFirstCollectionこのコードが行うことは、 variable 内のアイテムを比較することによって、 variable 内のアイテムを追加、削除、および更新することです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 に答える