3

selected変数にすべての変数の内容が含まれていない理由がわかりませんTempX。たとえば、私の場合、変数にはTempX1つのスーパーオブジェクトが含まれていましたが、最初の交差点に到達するとすぐに失われ、ビューには常に空のリストが表示されます...

ところで、blablabla.ToList() はリアルで複雑な linq クエリです。わかりやすいように載せました。

ありがとう、ここにコードがあります:

 public ActionResult Search(string q)
        {
            ViewBag.q = q;

            String[] strQueries = q.Split(' ');

            IEnumerable<SuperObject> selected = new List<SuperObject>();

            foreach (string str in strQueries)
            {  
                //Query 1
                IEnumerable<SuperObject> Temp1 = blablabla.ToList();

                //Query 2
                IEnumerable<SuperObject> Temp2 = blablabla2.ToList();

                //Query 3
                IEnumerable<SuperObject> Temp3 = blablabla3.ToList();

                //Query 4
                IEnumerable<SuperObject> Temp4 = blablabla4.ToList();

                selected = selected.Intersect(Temp1);
                selected = selected.Intersect(Temp2);
                selected = selected.Intersect(Temp3);
                selected = selected.Intersect(Temp4);
            }

            return View("Search", selected);
        }
4

2 に答える 2

10

Unionの代わりに使用することをお勧めしますIntersect。ここに違いがあります。自明だと思います。 合体、交差、差比較。

于 2013-02-27T01:11:59.010 に答える
0

空のリストと Temp 1-4 が交差しています。これでは何の成果も得られません。

編集:詳しく説明すると、交差は2つのコレクションに共通するすべての要素を取得します。交差している最初のコレクションは空であるため、結果は常に空になります。したがって、答えは実際に何をしようとしているかによって異なります。4 つのリストすべてに共通する要素だけを見つけようとしていますか? もしそうなら、BurundukXPが言ったことをしてください:

selected = Temp1.Intersect(Temp2);
selected = selected.Intersect(Temp3);
selected = selected.Intersect(Temp4);

各リスト内のすべての要素の一意のリストを取得しようとしていますか? 次のようにします。

selected.AddRange(Temp1);
selected.AddRange(Temp2);
selected.AddRange(Temp3);
selected.AddRange(Temp4);
selected.Distinct();
于 2013-02-27T01:01:39.683 に答える