2012-03-19 5 views
0

私は次のコードを持っています。null値を検索すると、EF内のLINQが失敗しますか?

//I pick the first story where its StartSegment is not null. 
var story = container.StorySet.FirstOrDefault(s => s.StartSegment != null); 

if (story != null) 
{ 

    //the following assert fails because story.StartSegment is null. 
    Assert.IsNotNull(story.StartSegment, 
             "The target story of this homework has no start segment."); 

} 

story.StartSegmentが実際のヌルであるため、このユニットテストは、失敗しますが、明示的に開始セグメント nullではない話を検索FirstOrDefaultのラムダ式を与え、私はこれを考えていません意味があります。

誰でも手伝ってもらえますか?

+1

をあなたは 'First'の代わりに'使用する必要がありますFirstOrDefault'この場合 – Snowbear

+0

しかし、なぜですか?なぜこれが必要なのか説明できますか?違いは何ですか? –

+0

要素が見つからなかった場合、firstまたはdeafultはnullを返します。その要素をチェックする必要があります。 – Tsabo

答えて

2

などのようなものではなく、IS NULLの述語を持つ必要があります。それは怠け者/熱心なロードプーブメントです。

実際、Story.StartSegmentはnullではありません。

あなたはそれを(熱心な負荷で)含めていませんでした。これを試して...

var story = container.StorySet 
    .Include("StartSegment ") 
    .FirstOrDefault(s => s.StartSegment != null); 

は、このようなあなたのentitie関係..

StorySet(多くの)-----(0または1)StartSegment

StartSegmentのように定義されていると仮定StorySetの "NavigationProperty"。生成されたクエリは次のようになります。

SELECT * FROM StorySet WHERE StorySet.StartSegmentId is not null 

このクエリは既存のエンティティを返します。 しかし、あなたが明示的に .INCLUDE(「StartSegment」)にそれを伝えるまで、EFは、ナビゲーションプロパティの瞬間を作成しませんデフォルトで

+0

これを防ぐために、毎回「インクルード」を使用する必要はありませんか? –

+0

これはデフォルトのEFビヘイビアで、関連するエンティティオブジェクトをクエリする際のeager/lazy/expliciteの読み込みを参照してください。[リンク](http://msdn.microsoft.com/en-us/library/bb896272.aspx) – aifarfa

+0

SQL文(SQLプロファイラ)? – yonexbat

0

DBブールロジック関連の問題だと思います。 SQLでは、これは真ではありません:someNullValue = NULL。代わりにsomeNullValue IS NULLを使用してください。おそらくEFはこの場合正しいnull比較を気にしないので、最初の要素を返します。最初の要素はNULL StartSegmentを持つ可能性があります。データベースに対して発行された照会を検査します。 = NULL

+0

そして、この問題の解決策は何ですか?適切なヌル比較を行うにはどうすればよいですか? –

+0

発行されたSQLコマンド(プロファイラまたはデバッガ)を見てください! 単体テストのLINQ to EntitiesまたはLINQが対象ですか? – yonexbat

1

は、次のコードを試してみてください。

var story = container.StorySet.Where(s => s.StartSegment != null).FirstOrDefault(); 
+0

ようこそStackOverflowへ。コード領域を使用するように、メッセージをフォーマットしてみましょう。 –

関連する問題