2013-07-01 39 views
0

使用this answer中提到的某些邏輯,我使用此代碼在幾個表上執行外連接。我知道三個連接中的一個會產生一個MyField值。但是,在我的select語句中,我調用了一個構造函數,而我只想使用不爲null的MyField值。不可空字段上的Linq外連接

public static MyResult GetMyResult(string MyString) 
{ 
    var result = (from w in context.TABLE_ONEs 
     from a in context.TABLE_TWOs.Where(x => x.field1 == w.field1).DefaultIfEmpty() 
     from l in context.TABLE_THREEs.Where(y => y.field1 == w.field1).DefaultIfEmpty() 
     from n in context.TABLE_FOURs.Where(z => z.field1 == w.field1).DefaultIfEmpty() 
     select new MyResult(w.someField, 
      w.someOtherField, 
      (a.date ?? l.date ?? n.date)) 
     ).First(); 

     return result; 
    } 

但是,我收到編譯錯誤,說:「運營商'??'不能應用於'System.DateTime'和'System.DateTime'類型的操作數「。這適用於可空數據類型,例如字符串,但不適用於此「日期」字段。

除了將數據庫列更改爲可爲空的DateTime之外,您是否知道解決此問題的方法?

+0

在數據庫中未設置**時,將** DateTime **字段默認爲** DateTime.MinValue **。在這種情況下,像這樣醜陋的東西可以工作:**(a.date!= DateTime.MinValue?a.date:(l.date!= DateTime.MinValue?l.date:n.date))** –

+0

@ThomasC .G.deVilhena:我嘗試了這個解決方案,並且得到了System.Reflection.TargetOfInvocationException。 –

回答

1

以下是不是很乾淨,但應該工作。

date = (DateTime?) (a != null) ? a.date : (l != null) ? l.date : (n != null) ? n.date : null 

代替使用MinDate的可爲空的DateTime,所以它仍然是一個值類型。