0

この回答で言及されているいくつかのロジックを使用して、このコードを使用していくつかのテーブルで外部結合を実行しています。3 つの結合のうちの 1 つが 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 許容データ型では正常に機能しますが、この「日付」フィールドでは機能しません。

データベース列をnull許容のDateTimeに変更する以外に、これを修正する方法を知っていますか?

4

1 に答える 1

1

以下はきれいではありませんが、うまくいくはずです。

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

null 許容の DateTime の代わりに MinDate を使用して、値型のままにします。

于 2013-07-01T00:52:49.707 に答える