C# 如何与多个IEnumerable相交?
我不明白为什么我选择的变量C# 如何与多个IEnumerable相交?,c#,asp.net-mvc,linq,linq-to-sql,ienumerable,C#,Asp.net Mvc,Linq,Linq To Sql,Ienumerable,我不明白为什么我选择的变量不包含所有TempX变量的内容。例如,在我的例子中,变量TempX包含一个超对象,但一旦到达第一个相交点,它就会丢失,并且我的视图总是显示一个空列表 顺便说一下,bla.ToList()是真实而复杂的linq查询。我把这个写清楚了 谢谢,下面是代码: public ActionResult Search(string q) { ViewBag.q = q; String[] strQueries = q
不包含所有TempX
变量的内容。例如,在我的例子中,变量TempX
包含一个超对象,但一旦到达第一个相交点,它就会丢失,并且我的视图总是显示一个空列表
顺便说一下,bla.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);
}
公共操作结果搜索(字符串q)
{
ViewBag.q=q;
字符串[]strquerys=q.Split(“”);
IEnumerable selected=新列表();
foreach(strquerys中的字符串str)
{
//问题1
IEnumerable Temp1=bla.ToList();
//问题2
IEnumerable Temp2=bla2.ToList();
//问题3
IEnumerable Temp3=bla3.ToList();
//问题4
IEnumerable Temp4=bla4.ToList();
选定=选定。相交(Temp1);
选定=选定。相交(Temp2);
选定=选定。相交(Temp3);
选定=选定。相交(Temp4);
}
返回视图(“搜索”,选中);
}
您正在将一个空列表与临时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();
您可能希望使用联合
而不是相交
。区别在于此,我认为这是不言而喻的:
您是否尝试过进入代码并查看每个交叉口的结果?