我有一个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;
我做错了什么?
答案 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();