2011-06-22 63 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();