次のシナリオで最速のソリューションは何ですか:
オブジェクトのリストがあり、テーブル (SQLCE) の行に一致するオブジェクトを除外する必要があります。
以下は、疑似コードの 2 つの方法です。
DataContext dc = new DataContext();
var dbOjbToExclude = dc.Tables.Where(..).Select(r=>r);
foreach (var item in myOriList)
{
if (!dbObjToExclude.Any(r=>r.prop1==item.prop1 && r.prop2==item.prop2))
//add item to a new collection
}
上記で、ループ内の各項目に対して db クエリが複数回実行されると思いますか? オブジェクトの多くのプロパティのうち 2 つだけをチェックしています。もう 1 つの方法は、これら 2 つのプロパティだけを持つオブジェクトのデータ オブジェクト コレクションを取得し、そのコレクションで一致するものをチェックすることです。
DataContext dc = new DataContext();
var dbOjbToExclude = dc.Tables
.Where(..)
.Select(r=> new HelperObj {r.prop1,r.prop2})
.ToList<HelperObj>();
foreach (var item in myOriList)
{
if (!dbObjToExclude.Any(r=>r.prop1==item.prop1 && r.prop2==item.prop2))
//add item to a new collection
}
どちらが速いですか?私が言ったように、これは sqlce と linq から sql への組み合わせなので、どちらがパフォーマンス的に優れているか知りたいです。