2009-03-03 8 views
1

LINQ to SQLクエリ構文のISDATE()に相当することを知っている人はいますか?私は日付を含むSQLでvarcharフィールドを持っているので、非日付行をフィルタリングする必要があります。LINQ to SQL T-SQLとキャストのISDATE()に相当しますか?

このような何かを期待していた:

var query = SomeDataContext; 
    query = from p in query 
    where p.ISDATE(field1) == true; 
    select p; 

、1は、LINQの構文でSQLのために何かをキャストだろうか?

CAST(SomeDate AS SMALLDATETIME) 

答えて

3

トリックを行うにこれは、単にISDATEを呼び出すデータベース内のユーザ関数を作成してそれを返すものです。値

CREATE FUNCTION My_ISDATE(@maybeDate varchar(max)) 
    returns bit 
    as return ISDATE(@maybeDate); 

その後にデータベースコンテキストをMy_IsDateを追加し、あなたにそれを使用する照会:

var db = SomeDataContext; 
var query = from p in db.MyTable 
where db.My_ISDATE(p.field1) 
select p; 
+0

それはうまくいくように見えます。どのように2つの異なるコンテキストからクエリシーケンスをマージするでしょうか?テーブルに参加することによって?さまざまなタイプの?これは初心者の質問のように思われる場合はごめんなさい。私はかなり新しいDLINQです。私はクエリを構築するためにLINQtoSQLの遅延実行を利用しています。 – stevenjmyu

2

LINQ to SQLを使用する場合、ISDATEにマップする拡張メソッドはありません。

すべてのデータをロードしてからクライアント空間でフィルタリングを行っても問題が解決しない場合は、フィールドでTryParseを使用して日付と比較してください。

それ以外の場合は、(ISDATEを使用できるように)必要なデータを返すストアドプロシージャを作成し、そのコンテキストで実行します。

ISDATEの構文も正しくありません。 ISDATEは式が有効な日付形式であるかどうかを伝えます。クエリは次のようになります。

var query = SomeDataContext; 
    query = from p in query 
    where ISDATE(field1) != 0 && CONVERT(datetime, field1) > some date 
    select p; 

構文は無効ですが、クエリをどのように作成するかを知ることができます。

+0

私はTryParseを使用してみてくださいかもしれないが、リターンセットはかなり大きいです。パフォーマンスがどのようになるかがわかります。ありがとう。 – stevenjmyu

+0

@steven:SPルートを試してみることをお勧めします。結果セットが大きければ、パフォーマンスが低下するでしょう。 – casperOne

+0

、ありがとう。 Jameのソリューションと一緒に行く。 – stevenjmyu