4

2 つの ICollection コレクションがあります。

public partial class ObjectiveDetail
{
    public int ObjectiveDetailId { get; set; }
    public int Number { get; set; }
    public string Text { get; set; }
}

var _objDetail1: // contains a list of ObjectiveDetails from my database.
var _objDetail2: // contains a list of ObjectiveDetails from web front end. 

これらを反復処理し、追加、削除、または更新を発行して、データベースを Web フロントエンドからの最新のものと同期するにはどうすればよいですか?

最初のリストにレコードがあり、2 番目のリストにない場合は、次のようにします。

_uow.ObjectiveDetails.Delete(_objectiveDetail);

最初のリストではなく 2 番目のリストにレコードが存在する場合は、次のようにします。

_uow.ObjectiveDetails.Add(_objectiveDetail);

1 番目と 2 番目にレコード (同じ ObjectiveDetailId) がある場合は、それらが同じかどうかを確認し、そうでない場合は次を発行する必要があります。

_uow.ObjectiveDetails.Update(_objectiveDetail);

私はこれをある種の方法で行うことを考えていました:

foreach (var _objectiveDetail in _objectiveDetails) {} 

しかし、私はこれらのうちの2つが必要になるかもしれないと思います。また、より良い方法があるかどうか疑問に思っています. どうすればこれを行うことができるかについて誰か提案がありますか?

4

3 に答える 3

1

2 つのリストを互いのコピーにしたいだけのようです。Copy メソッドを実装して古いコレクションを置き換えることができます。ICollection を実装する場合は、CopyTo を実装する必要があります。また、バージョン フィールドをコンテナーを更新する必要があるかどうかを知ることができます。このようにしたくなく、要素を調べて更新したい場合は、各オブジェクトに状態 (変更、削除、更新) を保存できるかどうかを確認してください。これは比較に役立ちます。

于 2013-08-10T09:37:30.903 に答える
-1

foreach (var _objectiveDetail in _objectiveDetails) {} しかし、これらのうちの 2 つが必要になる可能性があると思います。また、より良い方法があるかどうかも疑問に思っています。どうすればこれを行うことができるかについて誰か提案がありますか?

コレクション全体をループする代わりに、LINQ クエリを使用します。

var query = from _objectiveDetail in _objectiveDetails

where (condition) select ... ;

更新: Web エンドから何かを更新/削除/追加する場合、コレクション全体を反復するのは無意味です。人間はコンピューターより少し遅いですね。1つずつ実行します。実際、私は 2 つのコレクションの概念を理解していません。それはなんのためですか?それでも必要な場合: イベントを使用してクエリを実行し、更新/削除/追加されたレコードを選択し、適切な操作を行います。

于 2013-08-10T08:42:43.953 に答える