2011-06-22 61 views
2

我有一個Dictionary<MyEntity1, IList<MyEntity2>>,我有一個MyEntity2對象,我知道它是在字典列表的一個(也是唯一的)列表中的(我甚至在調試過程中看到它)。如何以下查詢返回空: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

請編輯您的帖子如此解釋>的完整定義是可見 –

+0

好吧,我將修改它,但答案貼了幾秒鐘前工作(我沒能看到誰發佈它)。 – Diego

+0

@Richard Morgan:不,我不是。 – Diego

回答

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

LINQ查詢總是返回集合,即使只有一個對象實例

+0

如果沒有找到對象,它會返回null嗎? – Diego

+0

@Diego:不,它不會返回null ......如果找不到它,它會拋出異常。 use.FirstOrDefault()如果你想要一個null。 –

1

你應該使用類似

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

查詢將返回IEnumerable<MyEntity1>和鑄造,爲MyEntity1總會回報空值。演員表無效,as將返回空。

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();