2011-02-08 13 views
4

我想快速選擇一些行,很好地爲下拉列表/選擇列表或類似的格式 - 但我有一個字段在數據庫中,可以爲空(DateOfBirth )。使用LINQ和實體框架選擇一個潛在的空字段

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

有沒有辦法在這種情況下處理LINQ內的可空類型?

編輯:

我沒有注意到這樣一個事實,即因爲這是使用實體框架,與標準的LINQ工作方法不能使用,除非他們有一個SQL翻譯。

  • 出生日期是可空<日期時間>
  • 來源是實體框架4
+0

你想怎樣處理? – SLaks 2011-02-08 15:09:11

+0

...「+(at.DateOfBirth as string ?? string.empty), – asawyer 2011-02-08 15:11:07

回答

7

您可以使用空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(); 
2

通常可爲空可使用variable ?? default

var res = nullableVariable ?? defaultValue; 

但要小心使用日期時間進行處理,LINQ將嘗試在SQL來實現這一點,DateTime.MinValue從C#是不在SQL的有效範圍內,並會給你一個錯誤信息。

2

既然你只是在做字符串追加嘗試這個。

var athletes = (from at in _db.Athletes 
      select new{ 
        Name = at.Name + " " + (at.DateOfBirth ?? string.Empty), 
        Id = at.AthleteId 
        }).ToList(); 
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()