有人可以帮我解决这个例外吗?我不明白它意味着什么或如何解决它...这是一个SqlException,带有以下消息:
使用UNION,INTERSECT或EXCEPT运算符组合的所有查询在其目标列表中必须具有相同数量的表达式.
我在伪代码中运行查询时得到它,如下所示:
// Some filtering of data var query = data.Subjects .Where(has value) .Where(has other value among some set of values); // More filtering, where I need to have two different options var a = query .Where(some foreign key is null); var b = query .Where(some foreign key is not null) .Where(and that foreign key has a property which is what I want); query = a.Union(b); // Final filter and then get result as a list var list = query .Where(last requirement) .ToList();
如果我删除了a.Union(b)
部件,它会毫无例外地运行.所以我知道错误就在那里.但为什么我会得到它?我该如何解决?我在这里做的事太疯狂吗?我误解了如何使用这个Union
东西吗?
基本上我所拥有的是一些具有其他实体的外键的实体.我需要获得所有具有该外键设置的null
实体或该外来实体满足某些要求的实体.
从您列出的SQL错误判断,您可能遇到了同样的问题.基本上,当Linq to SQL查询在两个不同的查询中使用Concat或Union扩展方法时,Linq to SQL中出现了一个错误,它会单独优化每个投影,而不考虑投影必须保持不变才能完成的事实SQL联盟.
参考文献:
使用UNION或CONCAT时,LINQ to SQL会生成错误的TSQL
Linq to SQL Union相同字段名生成错误
如果这恰好是你的问题,我找到了一个适合我的解决方案,如下所示.
var queryA = from a in context.TableA select new { id, name, onlyInTableA, } var queryB = from b in context.TableB let onlyInTableA = default(string) select new { id, name, onlyInTableA, } var results = queryA.Union(queryB).ToList();