1

次の SQL クエリを検討してください。

SELECT
   *
FROM 
   Orders
WHERE
   (AdjShipDate IS NOT NULL OR EstShipDate IS NOT NULL)
    AND
    CASE 
        WHEN AdjShipDate IS NOT NULL THEN AdjShipDate
        WHEN AdjShipDate IS NULL AND EstShipDate IS NOT NULL THEN EstShipDate
    END
    BETWEEN '2011-07-01' AND '2011-07-30'

ケースの WHEN 式は、クエリしようとしているテーブルの値 (AdjShipDate) に依存します。Linq to SQL で同様のクエリを作成するにはどうすればよいですか?

4

2 に答える 2

1

これは本質的に COALESCE です。

where (o.AdjShipDate ?? o.EstShipDate) >= new DateTime(2011,07,01) 
   && (o.AdjShipDate ?? o.EstShipDate) <= new DateTime(2011,07,30)

私は確かではありませんが?? 演算子は Linq-to-SQL でサポートされています。そうでない場合は、試すことができます

where (o.AdjShipDate != NULL 
           && o.AdjShipDate >= new DateTime(2011,07,01) 
           && o.AdjShipDate <= new DateTime(2011,07,30))
   || (o.AdjShipDate == NULL && o.EstShipDate != NULL 
           && o.EstShipDate >= new DateTime(2011,07,01) 
           && o.EstShipDate <= new DateTime(2011,07,30))
于 2012-11-02T22:01:38.127 に答える
0

これは以下と完全に同等です:

SELECT
   *
FROM 
   Orders
WHERE
    (AdjShipDate IS NOT NULL and AdjShipDate BETWEEN '2011-07-01' AND '2011-07-30')
     OR
    (AdjShipDate IS NULL and EstShipDate IS NOT NULL ANd EstShipDate BETWEEN '2011-07-01' AND '2011-07-30') 

LinqToSql にコンパイルするだけです。

于 2012-11-02T22:06:54.880 に答える