2009-08-08 3 views
3

SubsonicのFind<T>メソッドを使用して、「null」値を含むフィールドを持つ行を検索する方法を教えてください。議論のために、 "SynchronizedOn"と呼ばれるnull可能なDateTimeフィールドを含む "Visit"というac#クラスがあり、Subsonicの移行で対応する "Visits"テーブルと "SynchronizedOn"フィールドが作成されたとしましょう。私は、SQLクエリを自分で書くことだった場合Subsonic 3、SimpleRepository、SQL Server:NULLフィールドを持つ行を見つける方法

、私は次のように記述します。

SELECT * FROM Visits WHERE SynchronizedOn IS NULL 

私は次のコードを使用する場合:

var visits = myRepository.Find<Visit>(x => x.SynchronizedOn == null); 

サブソニックは、次のSQLクエリに変換しますが。

SELECT * FROM Visits WHERE SynchronizedOn == null 

これは決して行を返しません。

私は、次のコードを試してみましたが、それはエラーがスローされます。

visits = repository.Find<Visit>(x => x.SynchronizedOn.HasValue); 

私は、次の構文を使用することができました:

var query = from v in repository.All<Visit>() 
      where v.SynchronizedOn == null 
      orderby v.CreatedOn 
      select v; 
visits = query.ToList<Visit>(); 

をしかし、それはFind<T>メソッドを使用するような短いように素敵ではありません。

Find<T>メソッドで「SynchronizedOn IS NULL」条件をどのように指定できるかは、誰でも知っていますか?

答えて

1

あなたは使用することができます。

var visits = myRepository.All<Visit>().Where(x => x.SynchronizedOn == null).ToList(); 
+0

をあなたの提案が私のLINQクエリに改良したものであるが、検索方法を使用していません。 Find メソッドがnullをチェックできないことを理解する必要がありますか? – desautelsj

関連する問題