不可为空字段上的Linq外部联接

不可为空字段上的Linq外部联接,linq,outer-join,Linq,Outer Join,使用中提到的一些逻辑,我使用这段代码在几个表上执行外部联接。我知道三个联接中的一个将产生MyField值。然而,在我的select语句中,我调用了一个构造函数,我只想使用不为null的MyField值 public static MyResult GetMyResult(string MyString) { var result = (from w in context.TABLE_ONEs from a in context.TABLE_TWOs.Where(x =&g

使用中提到的一些逻辑,我使用这段代码在几个表上执行外部联接。我知道三个联接中的一个将产生MyField值。然而,在我的select语句中,我调用了一个构造函数,我只想使用不为null的MyField值

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'类型的操作数。”。这适用于可为空的数据类型,如字符串,但不适用于此“日期”字段


除了将数据库列更改为可为null的DateTime之外,您知道解决此问题的方法吗?

下面的内容不太清楚,但应该可以解决

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

您使用MinDate而不是可为空的DateTime,因此它仍然是一种值类型。

当数据库中未设置DateTime字段时,DateTime字段是否默认为DateTime.MinValue?在这种情况下,像这样丑陋的东西会起作用:(a.date!=DateTime.MinValue?a.date:(l.date!=DateTime.MinValue?l.date:n.date))@ThomasC.G.deVilhena:我尝试了这个解决方案,得到了System.Reflection.TargetOfinDucationException。