使用Union与System.Linq.IQueryable

时间:2011-11-12 00:16:19

标签: c# linq-to-sql union iqueryable

我正在尝试在代码中使用联合:

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>'

3 个答案:

答案 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