C#Linq查询无法正常工作

时间:2011-06-22 17:29:03

标签: c# .net linq

我有一个Dictionary<MyEntity1, IList<MyEntity2>>,我有一个MyEntity2的对象,我知道它在一个(只有一个)字典列表中(我甚至在调试时看到它)。以下查询如何返回null:

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;

我做错了什么?

3 个答案:

答案 0 :(得分:6)

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

LINQ查询总是返回集合,即使只有一个对象实例

答案 1 :(得分:1)

您应该使用类似

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

查询将返回IEnumerable<MyEntity1>并将其转换为MyEntity1将始终返回null。演员表无效,as将返回null。

答案 2 :(得分: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();