2011-01-27 23 views
2

問題:時間の制約を持つレガシーデータを含むSql dateTime列。私はMVCフォームを日付セレクタを使用して、ユーザーが日付を選択し、その日付のDBからすべてのレコードを戻すことを許可します。長いDateTimeのLinq SQL問題

問題しかし、linq to sqlはデータモデルのリテラルなので、比較のためにdatetime列を日付にキャストできません。相続人は、データベース内のコードスニペット

myDateSelected = 27/01/2011
p.PostedDateは、私はストリップにp.PostedDateをキャストするにはどうすればよい27/01/2001午後五時09分00秒

var p from products 
where p.PostedDate == myDateSelected 
select p 

のようなものに等しくなります比較のために時間要素がオフになっていますか?

Linqにはかなり新しいので、これまでのところ私の問題の解決策を見つけることができません。

答えて

5

私は、p.PostedDateがDateTimeオブジェクトであると仮定しています。それが本当であれば、これはそうするべきです。

var p from products 
where p.PostedDate.Date == myDateSelected 
select p 
+0

両側をDateに取り除きたい場合は、次のようにします。var p from products p.PostedDate.Date == myDateSelected.Date select p –

+0

はいPostedDateはDateTimeです。ドー!ありがとうBecuzz。 (実際に@ Kイワノフ)。 – Scott

2

あなたはあなたのためのSQLにそれを翻訳する時間要素を切り捨てるDateTime.Dateを呼び出し、LINQツーSQLすることができます

var p from products 
where p.PostedDate.Date == myDateSelected 
select p 

はこのようなものに変換されます:

-- Region Parameters 
DECLARE @p0 DateTime = '2010-02-24 00:00:00.000' 
-- EndRegion 
SELECT [t0].[PostedDate] 
FROM [Products] AS [t0] 
WHERE CONVERT(DATE, [t0].[PostedDate]) = @p0