2013-02-27 106 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();