2011-07-21 3 views
12

nullでないレコードを見つけるためにLINQの正しい構文は何でしょうか?私は以下のコードを使用していますが、無駄です。LINQでnullでない

ありがとうございました。

   var list = (from t in dal.table 
          where t.name != null); 
+1

名前のデータ型は? – Clayton

答えて

23

selectを忘れました。

var list = (from t in dal.table 
      where t.name != null 
      select t); 
+0

ありがとう、私はそれについて忘れてしまった。しかし、私が選択した場合、私はまだ名前フィールドに値を持つレコードを取得しません。 – MdeVera

+0

@MdeVera: 'string.IsNullOrEmpty'が必要ですか? (わかりませんが、ちょっと推測します) – Mehrdad

+0

@MdeVera:本当にnullであることを確認してください。行方不明 'SELECT'は、私はあなたにも追加することができます@MdeVera今 – BoltClock

2

私は同じ奇妙な行動に遭遇しました。 C#のコードは

public DbSet<Document> Documents { get; set; } 
List<Document> = Documents 
    .Where(d => d.BusinessId = 818) 
    .Where(d => d.CurrencyId != null) 
    .ToList(); 

ですが、生成されたSQL文がこれです:

exec sp_executesql N'SELECT 
[Extent1].[DocumentId] AS [DocumentId], 
[Extent1].[DateCreated] AS [DateCreated], 
... 
FROM [dbo].[Documents] AS [Extent1] 
WHERE [Extent1].[BusinessId] = @p__linq__0',N'@p__linq__0 int',@p__linq__0=818  

明らかにLINQは.Where(!D => d.CurrencyId = null)の句を無視します。次のように

私のソリューションでした:

List<Document> = Documents 
    .Where(d => d.BusinessId = 818) 
    .ToList() // <== Gel all documents and filter in memory 
    .Where(d => d.CurrencyId != null) 
    .ToList(); 

注:技術的には、我々はLINQのツーオブジェクトへのLINQのからSQLへのNULLでないフィルタを移動します。

我々はメモリにすべての文書を選択し、(デシベルレベルに代わりフィルタリングの)がフィルタリングので、非常に効率が悪いです。

私のケースでは、レコードの数は通常小さいので、ソリューションは私のために働いた。

+0

これは、あなたのモデルが実際のデータベースと一致しないことを示唆します。つまり、モデルは 'CurrencyId'がヌル入力可能ではないデータベース用です。 – hvd

関連する問題