Linq外连接在非可空字段上

时间:2013-07-01 00:04:40

标签: linq outer-join

使用this answer中提到的一些逻辑,我正在使用此代码在几个表上执行外连接。我知道三个连接中的一个将产生MyField值。但是,在我的select语句中,我正在调用构造函数,而我只想使用非空的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'“类型的操作数。这适用于可为空的数据类型,例如字符串,但不适用于此“日期”字段。

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

1 个答案:

答案 0 :(得分:1)

以下不是很干净,但应该有用。

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

您可以使用MinDate代替可为空的DateTime,因此它仍然是值类型。