使用LINQ和Entity Framework使用可能为空的字段选择NEW

时间:2011-02-08 15:06:46

标签: c# linq

我想快速选择一些行,为dropdownlist / selectlist或类似的东西很好地格式化它 - 但我在db中有一个字段,可以为空(DateOfBirth)。

var athletes = (from at in _db.Athletes
           select new{
                  Name = at.Name + " " + at.DateOfBirth, 
                  Id = at.AthleteId 
                  }).ToList();

在这种情况下,有没有办法在LINQ中处理可空类型?

编辑:

我没注意这个事实,因为这是使用实体框架,除非他们有SQL翻译,否则不能使用与标准LINQ一起使用的方法。

  • DateOfBirth是Nullable<日期时间>
  • 来源是实体框架4

4 个答案:

答案 0 :(得分:7)

您可以使用null coalesce运算符,请参阅Equivalent of SQL ISNULL in LINQ?

类似的东西:

var athletes = (from at in _db.Athletes
           select new{
                  Name = at.Name + " " + (at.DateOfBirth ?? ""), 
                  Id = at.AthleteId 
                  }).ToList();

答案 1 :(得分:2)

通常可以使用variable ?? default

处理可为空的内容
var res = nullableVariable ?? defaultValue;

但要注意datetime,linq将尝试在SQL中实现此功能,而来自C#的DateTime.MinValue不在SQL的有效范围内,并且会给出错误消息。

答案 2 :(得分:2)

由于你只是在做字符串追加,试试这个。

var athletes = (from at in _db.Athletes
           select new{
                  Name = at.Name + " " + (at.DateOfBirth ?? string.Empty), 
                  Id = at.AthleteId 
                  }).ToList();

答案 3 :(得分:0)

在VB.NET中

Dim athletes = (From at In _db.Athletes
       Select New With{
              .Name = at.Name + " " + If(at.Field(Of Object)("DateOfBirth") = Nothing, string.Empty, at.Field(Of Object)("DateOfBirth")), 
              .Id = at.AthleteId 
              }).ToList()