2

これらの StackOverflow Answersを見たことがありますが、フィルタリング リストがメモリ内にある場合、同じ結果が得られません。

私はIDのリストを持っています。データベースに存在する ID をすべて削除したいので、追加する必要がある ID のリストが残ります。つまり、where not inLinq-To-Entities を使用して SQL クエリを実行する必要があります。問題は、その SQL を生成する代わりに、これらのメソッドがそれぞれリスト項目ごとに SQL クエリを生成することです。

var providerIds = new [] {"1130", "1", "16"};

方法 1 :

var missingProviders = (from provider in providerIds
                        where !JobProviders.Any(p => p.JobProviderID == provider)
                        select provider).ToList();

方法 2 :

var missingProviders = (from provider in providerIds
                        where !(from p in JobProviders select p.JobProviderID).Contains(provider)
                        select provider).ToList();

意図したフォームを生成するように LINQ クエリを構造化する方法はありますnot inか、それともこれらが唯一の解決策ですか?

4

2 に答える 2

-1

トリッキー。目の前にツールがないので、これがどのようにうまく機能するかわかりません。

var dbProviderIds = JobProviders.Select(p => p.JobProviderId);
var allProviders = dbProviderIds.Union(providerIds).Distinct();
var missing = allProviders.Except(dbProviderIds);

DB ですべてのプロバイダー ID を取得し、それをメモリ内のものと結合します。次に、データベースで既知のものを削除します。

于 2013-05-16T03:26:40.300 に答える