2015-11-04 85 views
3

的我有我的数据库中的表,其地址分成三列:使用条件运算符

First = The House number and street name NOT NULL 
Middle = e.g Business park name or NULL 
Last = Area name or NULL 

First柱将永远有一个值,但其他两个可能包含的值。我试图实现的是,如果Middle or Last为空返回First列值如果First or Middle有值然后返回这两个,如果全都返回它们全部3个。所以我想使用条件运算符来实现这一点。

我的代码如下:

using (var dbContext = new MyEntities()) 
{ 
    return dbContext.User.Select(a => new MyUserDto 
    { 
     Address = !string.IsNullOrEmpty(a.First + a.Middle + a.Last) ? a.First + a.Middle + a.Last : a.First 
    }).ToList(); 
} 

如何更改代码即可获得的First and Middle的值,如果中间不为空

,或者我应该在我MyUserDto创建单独的属性来表示什么在数据库?

+0

我会让你的DTO完全匹配数据库中的表,它有助于当你走另一条路,插入DTO到表中,你不必去尝试解析事情以获取输入的地址。 –

+1

您不应该需要将null连接到一个字符串上,它不会返回null,它会返回原始字符串。例如''Test“+ null ==”Test“' –

回答

5

如果中间或最后是空返回的第一列值,如果第一个或中间有值,则返回这两个如果一切再回到他们

的所有3如果我理解你的要求字面上那么这将是

Address = a.First + (a.Middle == null || + a.Last == null) ? "" : a.Middle + a.Last; 

但如果Last为空,但Middle不是那么对于Last价值被忽略,WH这将意味着这似乎很奇怪。我怀疑你只是想到位任何空的空白字符串这将仅仅是

Address = a.First + a.Middle + a.Last; 

由于与非空字符串(不像SQL)级联时,其中空字符串被当作空字符串在.NET。

或者我应该在MyUserDto中创建单独的属性来表示数据库中的内容?

您当然可以做到这一点,只需添加一个属性即可进行串联。这样,您可以独立设置部件,而无需解析串联的字符串。

+0

感谢您的详细解答,我非常感谢。我会尽快接受这个时间限制。 – Code

2
Address = a.First + a.Middle + a.Last 

这应该工作,你