3

我不明白为什么我的变量selected不包含所有TempX变量的内容。例如,在我的情况下,变量TempX包含一个 SuperObject 但一旦我到达第一个相交,它就丢失了,我的视图总是显示一个空列表......

顺便说一句, 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 相交一个空列表。这不会产生任何结果。

编辑:详细地说,一个 intersect 获取两个集合共有的所有元素。由于您相交的第一个集合是空的,因此结果总是空的。所以答案真的取决于你想要做什么。您是否只想找到所有 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 回答