Linq为什么连接字符串导致null?

wog*_*les 5 c# linq

我想到了"bill" + "john" + null == billjohn,但在我的这个例子中,它似乎正在评估为null:

 var clients = from client in taxPortalService.Client()
                          select new ClientViewModel
                              {                               
                                  ResidentialAddressLine1 = client.RESADDRESSLINE1,
                                  ResidentialAddressLine2 = client.RESADDRESSLINE2,
                                  ResidentialAddressLine3 = client.RESADDRESSLINE3,
                                  ResidentialAddressLine4 = client.RESADDRESSLINE4,
                                  ResidentialPostalCode = client.RESPOSTCODE,
                                  ResidentialCountry = client.RESCOUNTRY,
                                  IAResidentialAddress = client.RESADDRESSLINE1 + ", " + client.RESADDRESSLINE2 + ", " + client.RESADDRESSLINE3 + ", " + client.RESADDRESSLINE4 + ", " + client.RESPOSTCODE + ", " + client.RESCOUNTRY                               
                              };
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗?

在此输入图像描述

Mar*_*ell 7

我猜这是使用LINQ-to-SQL或EF作为后端,它正在生成SQL.那么,在一个TSQL null与任何级联是(默认): null.也许试试:

(row.Foo ?? "") + ", " + (row.Bar ?? "") + ...
Run Code Online (Sandbox Code Playgroud)

或者更容易:首先将数据作为值存入内存,然后进行合成.


小智 7

在C#中,或者更确切地说在.NET中,你是对的,"bill" + "john" + null给你"billjohn".

在SQL中,'bill' + 'john' + null给你null.

使用LINQ to Entities将您的C#转换为SQL,并且不会始终保留此类细微差别.

你可以使用更详细的

(client.RESADDRESSLINE1 ?? "") + ", " + (client.RESADDRESSLINE2 ?? "") + ", " + ...
Run Code Online (Sandbox Code Playgroud)

确保你只连接非空字符串,这不会有这个问题.