だけの方法のうち、これを取得するには...
var joinTry = from company in dc.Companies
join id in list on company.CompanyID equals id
select company;
動作しません。 LinqToSqlは参加できません。 "ローカルシーケンスは、Contains演算子以外のクエリ演算子のLINQからSQLへの実装では使用できません。
var containsTry = from company in dc.Companies
where list.Contains(company.CompanyID)
select company;
予測可能
SELECT [t0].[CompanyID], [t0].[CompanyName]
FROM [Company] AS [t0]
WHERE [t0].[CompanyID] IN (@p0, @p1, @p2, @p3, @p4, @p5, ...
ように...これがある限り、汚れ、SQLサーバーへのintのリストを取得するには何より高速な方法は真剣ありません。任意の呼び出しのオーバーヘッド時間は、どの解析よりも大きくなります。
SELECT
c.CompanyId,
c.CompanyName
FROM Company c
WHERE CompanyID IN (1,2,3,4,5,6,7,8,9,10)
は...
exec sp_executesql N'SELECT [t0].[CompanyID], [t0].[CompanyName]
FROM [Company] AS [t0]
WHERE [t0].[CompanyID] IN (@p0, @p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9)',N'@p0 int,@p1 int,@p2 int,@p3 int,@p4 int,@p5 int,@p6 int,@p7 int,@p8 int,@p9 int',@p0=1,@p1=2,@p2=3,@p3=4,@p4=5,@p5=6,@p6=7,@p7=8,@p8=9,@p9=10
(LINQによって生成される)...と同じ実行速度です...と同じ速度の二倍である...
SELECT
c.CompanyId,
c.CompanyName
FROM Company c
/* @Test is a table variable with 1-10 in it */
INNER JOIN @Test t ON t.ID = c.CompanyID
実際には、SQLサーバーの整数リストの処理を最適化する必要はありません。 IN()ソリューションでは、SQLはその整数をいつでも生成するインデックスに入れます。
本当の質問は...「6000の整数のリストを使って何を表していますか?」そして "私はこのリストをテーブルに入れますか?"クライアント側の6000個の整数リストを取得してサーバーに送信するソリューションは、Contains()を使用するソリューションよりもオーバーヘッドでオーバーヘッドになります。 LinqToSQLを使用する場合、あなたはある程度パラダイムに売り切れなければなりません。
これでも気にならない場合は、任意の制限リスト用のテーブルを作成してみてください。 2つの列、両方のint。次に、そのテーブルにあなたのIDを挿入して使用することができます。
var searchTry = from company in dc.Companies
join search in dc.SearchLists on company.CompanyID equals search.ValueID
where search.SearchID == savedSearchID
select company;
IDのサブセットは連続する可能性がありますか?例えば[1-5,10-12,14,19-32] – dtb
あなたのIDを送信する必要がないように、クエリを言い換える方法はありますか?(ジョインやサブクエリがそうであるようにあなたは6,000 IDをサーバー上で解決することができますか?) – JMarsch
これらのIDを別のテーブルから選択すると、SQLストアドプロシージャを作成してこれらのIDを使用し、ストアドプロシージャの結果をクライアントに返すのはいかがですか? –