0

我是 Linq 的新手,无法解决以下问题。尝试在互联网上检查很多,但没有得到正确的答案。

我有以下查询:

var packages = from p in Packages
               from cl in p.Categories
               from temp in Clusters
               where (cl.Id == temp.Key)
               select p;

类别是包含 id 和 name 的对象的集合。这里的集群是键值对的字典。执行此查询时出现以下错误:

无法创建类型为“System.Collections.Generic.KeyValuePair`2”的常量值。此上下文仅支持原始类型(“例如 Int32、String 和 Guid”)。

另一种选择是为包中的每个类别添加一个 for each 循环。有没有更清洁的方法来做到这一点?

4

2 回答 2

3

您是否尝试过使用Dictionary.ContainsKey方法进行查询?

var packages = from p in Packages
               from cl in p.Categories
               where Clusters.ContainsKey(cl.Id)
               select p;
于 2012-07-11T11:12:31.090 回答
0
var packages = Packages.Where( 
                   p => p.Categories.Any( 
                   c => Clusters.ContainsKey(c.Id)));

如果您希望每个包在结果中只出现一次。它也更有效,因为您的问题中 ContainsKey 是 O(1) 而不是 O(Clusters.Count) 。

于 2012-07-11T11:19:38.670 回答