0

これがループ内のすべてのアイテムと交差していない理由がわかりません.最後の2つだけです.IQueryableと関係があると思います.

var outerquery = db.Employees.Where(x => x.Name = "Smith").Select(x => x.EmployeeID);

foreach(var name in nameList){
var innerQuery = db.Employees.Where(x => x.Name = name).Select(x => x.EmployeeID);
outerquery = outerquery.Intersect(innerQuery);
}

return outerquery.ToList();

編集 - より具体的な例。テーブルには約 3500 万のレコードがあります。

テーブルには ID、ConceptID、Word があります。単語は複数の ConceptID を持つことができ、レコードごとに 1 つの単語があります。検索文字列 '肩の痛み 慢性' を交差させて、これら 3 つの単語を共有するすべての ConceptID を取得する必要がありました。次のように返されます。

Concept1234 - shoulder
Concept1234 - pain
Concept1234 - chronic

私が得ているもの(最後の2つだけ):

Concept1234 - pain
Concept1234 - chronic

3,500 万件のレコードに対して OR を実行するのは、私が持っているこのモンスター サーバーでも大雑把であり、1 秒以内にそれを実行するには交差が唯一の方法です。

LINQ to SQL (Entity Framework) で生成しようとしているのはこれです -

SELECT ConceptID FROM WordTable WHERE Word = 'shoulder'
INTERSECT
SELECT ConceptID FROM WordTable WHERE Word = 'pain'
INTERSECT
SELECT ConceptID FROM WordTable WHERE Word = 'chronic'
4

1 に答える 1

0

ループの各反復で置き換えられるループouterquery内にあり、以前のデータが失われます。foreach

于 2012-08-23T00:13:03.020 に答える