1. ホーム
  2. c#

[解決済み] Linqクエリの結果を辞書に変換する

2022-03-25 11:36:03

質問

Linq to SQLを使用してデータベースにいくつかの行を追加したいのですが、行を追加する前に"カスタムチェック"を行い、入力されている行を追加、置換または無視する必要があるかどうかを確認したいのですが、可能ですか? クライアントとDBサーバー間のトラフィックをできるだけ少なくし、クエリの数を最小限に抑えたいと思います。

そのためには、検証のために必要な情報をできるだけ少なくし、処理の最初に一度だけ取得するようにしたいと思います。

こんな感じで考えていたのですが、明らかにうまくいきません。どなたかアイデアをお持ちの方はいらっしゃいませんか?

Dictionary<int, DateTime> existingItems = 
    (from ObjType ot in TableObj
        select (new KeyValuePair<int, DateTime>(ot.Key, ot.TimeStamp))
    )

ObjectType オブジェクト全体を TableObject からダウンロードすることなく、最後に Dictionary を取得することができます。

以下のようなコードも考えましたが、適切な方法を探そうと思いました。

List<int> keys = (from ObjType ot in TableObj orderby ot.Key select ot.Key).ToList<int>();
List<DateTime> values = (from ObjType ot in TableObj orderby ot.Key select ot.Value).ToList<int>();
Dictionary<int, DateTime> existingItems = new Dictionary<int, DateTime>(keys.Count);
for (int i = 0; i < keys.Count; i++)
{
    existingItems.Add(keys[i], values[i]);
}

解決方法は?

を使ってみてください。 その ToDictionary メソッド というように

var dict = TableObj.Select( t => new { t.Key, t.TimeStamp } )
                   .ToDictionary( t => t.Key, t => t.TimeStamp );