LINQ加入返回NULLS的地方

时间:2011-08-24 22:10:46

标签: linq linq-to-sql

我正在尝试在LINQ语句中进行JOIN,它还会返回NULLS。我的代码是:

var linqQuery = (from r in orgServiceContext.CreateQuery("opportunity")
     join a in orgServiceContext.CreateQuery("account") on ((EntityReference)r["accountid"]).Id equals a["accountid"]
     join c in orgServiceContext.CreateQuery("contact") on ((EntityReference)r["new_contact"]).Id equals c["contactid"]
     where ((EntityReference)r["new_channelpartner"]).Id.Equals(new Guid("c55c2e09-a3be-e011-8b2e-00505691002b"))
     select new
     {
         OpportunityId = !r.Contains("opportunityid") ? string.Empty : r["opportunityid"],
         CustomerId = !r.Contains("customerid") ? string.Empty : ((EntityReference)r["customerid"]).Name,
         Priority = !r.Contains("opportunityratingcode") ? string.Empty : r.FormattedValues["opportunityratingcode"],
         ContactName = !r.Contains("new_contact") ? string.Empty : ((EntityReference)r["new_contact"]).Name,
         Source = !r.Contains("new_source") ? string.Empty : r["new_source"],
         CreatedOn = !r.Contains("createdon") ? string.Empty : r["createdon"],
         State = !a.Contains("address1_stateorprovince") ? string.Empty : a["address1_stateorprovince"],
         Zip = !a.Contains("address1_postalcode") ? string.Empty : a["address1_postalcode"],
         Eval = !r.Contains("new_colderevaluation") ? string.Empty : r.FormattedValues["new_colderevaluation"],
         DistributorName = !r.Contains("new_channelpartner") ? string.Empty : ((EntityReference)r["new_channelpartner"]).Name,
         ContactStreetAddress = !c.Contains("address1_line1") ? string.Empty : c["address1_line1"]
     });

这下拉了一条记录是contactid匹配,但我也希望它以NULL接触方式记录下来。

任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:0)

LINQ不支持右外连接。考虑重新排列表源,以便您可以使用DistinctIfEmpty扩展方法执行左外连接。或者,您可以通过将所有连接写为where子句来使用LINQ版本的SQL-Ansi82而不是连接。