2011-06-22 9 views
2

私はDictionary<MyEntity1, IList<MyEntity2>>を持っていて、辞書のリストのうちの1つ(唯一のもの)にMyEntity2というオブジェクトがあります(私はデバッグ中にそれを見たこともあります)。次のクエリがnullを返す方法:C#Linqクエリが動作しない

IDictionary<MyEntity1, IList<MyEntity2>> myDictionary = new Dictionoary<MyEntity1, IList<MyEntity2>>(); 
MyEntity1 myEntity1 = (from p in myDictionary 
         where p.Value.Contains(myEntity2) 
         select p.Key) as MyEntity1; 

私は間違っていますか?

+0

辞典>の完全な定義は、[OK]を –

+0

見えるように自分の投稿を編集し、私はそれを編集しますが、答えは数秒前に投稿してください(私は見ることはなかった働いていました誰がそれを投稿したか)。 – Diego

+0

@リチャード・モーガン:いいえ、私はそうではありません。 – Diego

答えて

6
var myEntity1 = (from p in myDictionary 
       where p.Value.Contains(myEntity2) 
       select p.Key).First(); 

LINQクエリは、常に一つだけのオブジェクトインスタンス

+0

オブジェクトが見つからない場合はnullを返しますか? – Diego

+0

@Diego:いいえ、nullを返しません...見つからない場合は例外がスローされます。代わりにnullを使用する場合は、use.FirstOrDefault()を使用します。 –

1

であなたは、クエリがMyEntity1IEnumerable<MyEntity1>鋳造それを返します

MyEntity1 myEntity1 = (from p in myDictionary 
        where p.Value.Contains(myEntity2) 
        select p.Key).FirstOrDefault(); 

のようなものを使用した場合でも、コレクションを返します常にリターンヌル。キャストは無効で、asはnullを返します。

1

問題はSelectクエリがIEnumerableを返すことです。これはMyEntity1にキャストできません。

FirstOrDefault()を追加してください。キャストは必要ありません。

IDictionary<MyEntity1, IList<MyEntity2>> myDictionary = new Dictionary<MyEntity1, IList<MyEntity2>>(); 
var myEntity1 = (from p in myDictionary 
        where p.Value.Contains(myEntity2) 
        select p.Key).FirstOrDefault(); 
関連する問題