我是Linq的新手,无法解决以下问题。尝试在互联网上检查很多,但没有得到正确的答案。
我有以下查询:
var packages = from p in Packages
from cl in p.Categories
from temp in Clusters
where (cl.Id == temp.Key)
select p;
Categories是包含id和name的对象的集合。这里的集群是键和值对的字典。执行此查询时出现以下错误:
无法创建类型为'System.Collections.Generic.KeyValuePair`2'的常量值。 在此上下文中仅支持原始类型(例如Int32,String和Guid')。
另一个选项是为包中的每个类别添加一个for循环。有更清洁的方法吗?
答案 0 :(得分:3)
您是否尝试使用Dictionary.ContainsKey方法进行查询?
var packages = from p in Packages
from cl in p.Categories
where Clusters.ContainsKey(cl.Id)
select p;
答案 1 :(得分:0)
var packages = Packages.Where(
p => p.Categories.Any(
c => Clusters.ContainsKey(c.Id)));
如果您希望每个包只在结果中一次。 它也更有效,因为在你的问题中ContainsKey是O(1)而不是O(Clusters.Count)。