2015-11-19 162 views
1

我有两个LinqToSql查询返回结果集:联盟两个LINQ查询

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); 

即使两个单独的查询都这样做,它将不返回任何记录。

+1

检查单个查询上的'.ToList()'的结果,然后检查联合结果,以查看正在生成的SQL。 – StriplingWarrior

+0

我不明白为什么联盟不会有任何结果。这很奇怪。如果你不介意重复,你可以试试'.Concat'。无论如何,我认为想要考虑包括LastUpdate可能非常困难。 Concat会更快,因为它不必进行比较来尝试删除重复项。 –

+0

@大卫,请接受下面的答案。 –

回答

1

由于2个查询似乎并不依赖于对方,只要执行两者并且合并每个查询的结果(如果您只是试图获取单个列表)。

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

工作正常!非常感谢! –

+0

没问题,很高兴帮助。 –