c# - 联合两个 Linq 查询

标签 c# entity-framework linq linq-to-sql

我有两个返回结果集的 LinqToSql 查询:

var grResults = (from g in ctx.GeneralRequests
                             join rt in ctx.RequestTypes on g.RequestTypeId equals rt.RequestTypeId
                             join sub in ctx.Logins on g.SubmitterStaffId equals sub.LoginId
                             join onb in ctx.Logins on g.OnBehalfOfStaffId equals onb.LoginId
                             where sub.GadId == gadId
                             select new
                             {
                                 Status = "Submitted",
                                 RequestId = g.GeneralRequestId,
                                 Submitter = sub.UserName,
                                 OnBehalf = (onb == null ? string.Empty : onb.UserName),
                                 RequestType = (rt == null ? string.Empty : rt.Description),
                                 ProjectName = (g == null ? string.Empty : g.ProjectName) ,
                                 Comments =  (g == null ? string.Empty :  g.Comments),
                                 LastUpdate = g.LastUpdateDate
                             });

  var grdResults = (from gd in ctx.GeneralRequestDrafts
                                  join rt in ctx.RequestTypes on gd.RequestTypeId equals rt.RequestTypeId
                                  into tempRequestTypes
                                  from rt1 in tempRequestTypes.DefaultIfEmpty()
                                  join onb in ctx.Logins on gd.OnBehalfOfStaffId equals onb.LoginId
                                  into tempOnBehalf
                                  from onb1 in tempOnBehalf.DefaultIfEmpty()
                                  join sub in ctx.Logins on gd.SubmitterStaffId equals sub.LoginId                                  
                                  where sub.GadId == gadId
                                  select new
                                  {
                                      Status = "Draft",
                                      RequestId = gd.GeneralRequestDraftId,
                                      Submitter = sub.UserName,
                                      OnBehalf = (onb1 == null ? string.Empty : onb1.UserName),
                                      RequestType = (rt1 == null ? string.Empty : rt1.Description),
                                      ProjectName = (gd.ProjectName == null ? string.Empty : gd.ProjectName),
                                      Comments = (gd.Comments == null ? string.Empty : gd.Comments),
                                      LastUpdate = gd.LastUpdateDate
                                  });

问题是当我尝试将它们联合起来时。

 var results = grResults.Union(grdResults).OrderByDescending(r => r.LastUpdate);

即使两个单独的查询返回任何记录。

最佳答案

由于这两个查询似乎并不相互依赖,因此如果您只是想获取一个列表,只需执行两个查询并将每个查询的结果合并即可。

var results = grResults.ToList().Union(grdResults.ToList())
    .OrderByDescending(r => r.LastUpdate);

关于c# - 联合两个 Linq 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33811510/

相关文章:

c# - 字符串不能包含嵌入的空值?

c# - 如何在 Razor View 中检查模型字符串属性是否为 null

linq - SingleOrDefault() 方法 : what is "a default value"?

c# - 在 C# 中将非常大的指数转换为小数

c# - 为一个参数指定多个接口(interface)

C# SOAP : The specified type was not recognized: name ='arrayList'

c# - 在 EF4.1 中正确地从上下文附加和分离实体

c# - 嵌入式服务器应用程序在退出后停止工作

.net - 用于 ElasticSearch 的 NEST 框架中的 LINQ

c# - 从一个 LINQ 查询添加到两个不同的列表