我不明白为什么我的变量selected
不包含所有TempX
变量的内容。例如,在我的情况下,变量TempX
包含一个SuperObject,但是当我到达第一个相交时,它就丢失了,我的View总是显示一个空列表......
顺便说一句,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 :(得分:10)
您可能希望使用Union
代替Intersect
。这是区别,我认为它是自我解释的:
答案 1 :(得分:0)
您正在将一个空列表与Temp 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();