を押すことなくチェック:サブクエリが空の場合、LINQのは、次のように私は、LINQのサブクエリを持つリモートデータベース
for (int i = 0; i < parentAttributes.Length; i++)
{
Guid parent = parentAttributes[i];
var subQuery = from sc in db.tSearchCluendexes
join a in db.tAttributes on sc.AttributeGUID equals a.GUID
join pc in db.tPeopleCluendexes on a.GUID equals pc.AttributeGUID
where a.RelatedGUID == parent && userId == pc.CPSGUID
select sc.CPSGUID;
query = query.Where(x => subQuery.Contains(x.Id));
}
基本的な考え方は、(クエリ変数によって表されるように)私は、データのリストをフィルタリングすることであるに基づいて、サブクエリの結果は不確定な回数だけ実行されました。
しかし、サブクエリに実際にデータが含まれていて、ループの各繰り返し内でサブクエリを実行したくない場合は、クエリのどこで実行したいかという問題が発生しました(Count ()またはToList())を使用してリモートリソースにヒットします。以下のような何か、我々は法HasData(というそれを取る場合は)実際には、trueまたはfalseを返します:
for (int i = 0; i < parentAttributes.Length; i++)
{
Guid parent = parentAttributes[i];
var subQuery = from sc in db.tSearchCluendexes
join a in db.tAttributes on sc.AttributeGUID equals a.GUID
join pc in db.tPeopleCluendexes on a.GUID equals pc.AttributeGUID
where a.RelatedGUID == parent && userId == pc.CPSGUID
select sc.CPSGUID;
if (subQuery.HasData())
query = query.Where(x => subQuery.Contains(x.Id));
}
提案は歓迎されています。
ラムダ式の中にAnyを置くことによるメリットはありません – Aducci
ありがとう、私はこれを明日試してみます。ラムダのAny()を実行すると、実行が延期されるか、Aducciからのコメントによると違いはありませんか? – kh25
@ kh25:私は厚くはないAducciはそれは違いがないと言いました。彼は「利益がない」としか言いませんでした。私は彼がそれによって何を意味するのか完全にはわからない。おそらくあなたはそれを試して私たちに知らせることができますか? –