我正在尝试在代码中使用联合:
var qryQuestions =
(from q in db.table1
where q.ID == ID
&& q.categoryID == categoryID
orderby q.questionOrder ascending
select q) .Union
(from qp in db.table2
where qp.ID == ID
&& qp.categoryID == categoryID
orderby qp.questionOrder ascending
select qp);
我收到错误消息:
错误15'System.Linq.IOrderedQueryable< table1>'不包含'Union'的定义和最佳扩展方法重载'System.Linq.ParallelEnumerable.Union< TSource>(System.Linq.ParallelQuery< TSource>,System.Collections.Generic.IEnumerable< TSource>)'有一些无效的参数
和
错误30实例参数:无法从'System.Linq.IOrderedQueryable< table1>'转换到'System.Linq.ParallelQuery< table2>'
答案 0 :(得分:2)
这是因为您选择了两组不同的数据,而Linq无法理解您的目标。
而不是....选择q和....选择qp
var qryQuestions = (from q in db.table1
where q.ID == ID && q.categoryID == categoryID
select new {questionOrder= q.questionOrder, value2 = q.Value2})
.Union
(from qp in db.table2
where qp.ID == ID && qp.categoryID == categoryID
select new {questionOrder= qp.questionOrder, value2 = qp.Value2}))
.OrderBy(x => x.questionOrder);
这样做的原因是你试图选择整个不同的实体 - 即q!= qp,因为它们不是来自同一个表。
答案 1 :(得分:1)
如果您在订购前执行工会会发生什么?
var qryQuestions = (from q in db.table1
where q.ID == ID && q.categoryID == categoryID
select q)
.Union
(from qp in db.table2
where qp.ID == ID && qp.categoryID == categoryID
select qp)
.OrderBy(x => x.questionOrder);
答案 2 :(得分:0)
虽然Kelvin的答案部分正确(联合的两个部分必须是相同的类型/实体),但IQueryable.Union()的语法适用于IEnumerable参数。请尝试以下方法。
imageString