【问题标题】:How to select different fields using .Concat for Union All query如何使用 .Concat 为 Union All 查询选择不同的字段
【发布时间】:2018-06-22 06:56:20
【问题描述】:

我正在做一些初步工作,以便从 MVC 中的 webAPI 控制器中准备好数据消费。我正在使用一个 linq 查询,它模仿一个使用两个连接的联合查询。但是,我需要 select 语句在联合的每一侧要求不同的字段。当我运行查询时,这在 SSMS 中运行良好,但是当我在 linq 中创建查询时,它不允许字段不同。它给出了一个错误,指出每个匿名类型都需要一个相同类型的接收者。这是指通过 select new { } 创建的两个匿名类型...这是两个查询。

在 SQL 中:

Select m.Last_Name, first_name, m.dc_number, Dept_Job as JobOrStatus  FROM 
Master_Roster m 
INNER JOIN Class_Assignment a on m.dc_number = a.dc_number 
where a.subject_am = 'y1'
AND Start_Date_AM <= '1/31/18'

UNION ALL

Select m.Last_Name, first_name, m.dc_number, status_am  FROM Master_Roster m 
INNER JOIN Attend_am_y1 at on m.dc_number = at.dc_number 
where at.class_date_am >= '1/1/18'
AND at.class_date_am <= '1/31/18' 
ORDER BY Last_Name

在 linq 中:

(from m in db.Master_Roster
join c in db.Class_Assignment
on m.dc_number equals c.dc_number
orderby m.Last_Name
where c.Subject_AM == "y1"
select new { m.dc_number, m.Last_Name, m.First_Name }).Concat(
from m in db.Master_Roster
join a in db.attend_am_y1 on m.dc_number equals a.dc_number
orderby m.Last_Name
where a.class_date_am >= date1 && 
a.class_date_am <= date2
select new { m.dc_number, m.Last_Name, m.First_Name });

如果我将 dept_job 和 status_am 添加到 linq 查询,则会引发上述错误。我想在不使用存储过程的情况下做到这一点。有什么想法吗?

【问题讨论】:

    标签: linq linq-to-sql linq-to-entities


    【解决方案1】:

    不是放入 2 个匿名类型,而是放入相同的 viewmodel 和 concat。例如:

    Internal Class ConcatViewModel{
      public int DcNumber {get;set;}
      public string LastName {get;set;)
      // etc...
    }
    

    然后:

    select new ConcatViewModel{ 
      DcNumber = m.dc_number,
      LastName = m.Last_Name,
      FirstName = m.First_Name,
      Status = m.Dept_Job
    }
    

    select new ConcatViewModel{ 
      DcNumber = m.dc_number,
      LastName = m.Last_Name,
      FirstName = m.First_Name,
      Status = m.status_am
    }
    

    (假设 status_am 和 Dept_Job 是相同的底层类型)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      相关资源
      最近更新 更多