2013-02-27 58 views
3

我不明白爲什麼我的變量selected不包含所有變量的內容。例如,在我的情況下,變量TempX containt一個超對象,但只要我到達第一個相交,它會丟失,我的視圖始終顯示一個空列表...如何交叉多個IEnumerable?

順便說一下,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); 
     } 
+0

您是否嘗試加入代碼並查看每個交集的結果? – 2013-02-27 01:01:27

回答

10

你可能想使用Union而不是Intersect。這是區別,我認爲這是自我解釋: Union, intersection, difference comparison.

+0

漂亮的接吻!你完全正確!謝謝! – 2013-02-27 01:18:47

+1

+1精美的答案,太棒了。 – 2013-02-27 07:23:23

0

你相交的溫度與1-4的空單。這不會產生任何結果。

編輯:爲了詳細說明,相交獲取了兩個集合共有的所有元素。由於您正在交叉的第一個集合是空的,因此結果始終爲空。所以答案真的取決於你想要做什麼。你是否只想找到所有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();