Linq 连接具有空值的多个表

use*_*064 0 c# sql linq asp.net-mvc

我想从我的数据库构建中执行一个请求

Table Zipcodes
string Zipcode
string Description
string StateCode
string RegionCode
string CountryCode

Table States
string StateCode
string StateName

Table Region
string RegionCode
string RegionName

Table Country
string CountryCode
string CountryName
Run Code Online (Sandbox Code Playgroud)

所以,我想用名称而不是代码列出我所有的邮政编码。

我的邮政编码表包含 8 行。在 ZIPCode 表中,只有状态代码可以为 Null。

这是我的要求:

var dset = from s in db.ZIPCODEs
join u in db.COUNTRies on s.COUNTRYCODE equals u.COUNTRYCODE
join v in db.STATES on s.STATECODE equas v.STATECODE 
join w in db.REGIONS on s.REGIONCODE equals w.REGIONCODE                     
select new ZIPCODEListViewModel
    {
    ID = s.ID,
    ZIPCODE1 = s.ZIPCODE1,
    DESCRIPTION = s.DESCRIPTION,
    STATECODE = s.STATECODE,
    CONTRYCODE = s.COUNTRYCODE,
    REGIONCODE = s.REGIONCODE,
    STATECODE = s.STATENAME,
    COUNTRYNAME =u.DESCRIPTION,
    STATENAME = v.DESCRIPTION,
    REGIONNAME = w.DESCRIPTION
   };
Run Code Online (Sandbox Code Playgroud)

这将返回 0 行。

如果我只在不包含空值的 COUNTRY 和 REGION 上使用 join,我会收到所有行。

我的问题是:如何构建我的请求以返回所有行,并且在 Statename 中使用字符串或 null 是 Statecode is null ?

感谢您的帮助,并为糟糕的英语和糟糕的 linq 能力感到抱歉。

罗比

use*_*064 5

非常感谢。

它帮助我找到解决方案。

var dset = from s in db.ZIPCODEs
           join u in db.COUNTRies on s.COUNTRYCODE equals u.COUNTRYCODE into ulist from u in ulist.DefaultIfEmpty()
           join w in db.REGIONS on s.REGIONCODE equals w.REGIONCODE into wlist from w in wlist.DefaultIfEmpty()      
           join v in db.STATES on s.STATECODE equals v.STATECODE into vlist from v in vlist.DefaultIfEmpty()                          
           select new ZIPCODEListViewModel
          {
            ID = s.ID,
            ZIPCODE1 = s.ZIPCODE1,
            DESCRIPTION = s.DESCRIPTION,
            STATECODE = s.STATECODE,
            COUNTRYCODE = s.COUNTRYCODE,
            REGIONCODE = s.REGIONCODE,
            COUNTRYNAME =u.DESCRIPTION,
            STATENAME = v.DESCRIPTION,
            REGIONNAME = w.DESCRIPTION
        };
Run Code Online (Sandbox Code Playgroud)

在无法通过连接解决的字段中返回我所有的行空白。

罗比