【发布时间】:2011-10-27 17:37:58
【问题描述】:
我有以下三个表,需要从两个不同的表中引入信息。
- 表
baTable具有字段OrderNumber和Position。 - 表
accessTable具有字段OrderNumber和ProcessSequence(以及其他) - 表
historyTable具有字段OrderNumber和Time(以及其他)。
.
var progress = from ba in baTable
from ac in accessTable
where ac.OrderNumber == ba.OrderNumber
select new {
Position = ba.Position.ToString(),
Time = "",
Seq = ac.ProcessSequence.ToString()
};
progress = progress.Concat(from ba in baTable
from hs in historyTable
where hs.OrderNumber == ba.OrderNumber
select new {
Position = ba.Position.ToString(),
Time = String.Format("{0:hh:mm:ss}", hs.Time),
Seq = ""
});
int searchRecs = progress.Count();
查询编译成功,但是在调用Count()期间执行SQL时出现错误
使用 UNION、INTERSECT 或 EXCEPT 运算符组合的所有查询必须在其目标列表中具有相同数量的表达式。
显然,这两个列表各有三项,其中一项是常数。其他帮助板建议 Visual Studio 2010 C# 编译器正在优化常量,我已经尝试了常量的替代方案。
最令人惊讶的是,如果select new {...}中的Time=条目在两个子查询中都被注释掉了,SQL执行时不会出错。
【问题讨论】:
-
尝试将
Time = String.Format("{0:hh:mm:ss}", hs.Time)更改为Time = "foo"
标签: c# linq-to-sql concat