1

我使用 PreprocessQuery 方法在 lightswitch 中扩展查询。像这样的东西:

query = (from item in query where (validIDs.Contains(item.tableIDs.myID)) && elementCount[item.ID] <= maxEleCount) select item);

其中validIDsHashSet(int)elementCountDictionary(int, int)。第一个 where 子句工作正常,但第二个 -> elementCount[item.ID] <= maxEleCount 不工作。

我想要做的是通过一些ID(validID)过滤一个表,并检查另一个表中每个ID的条目数是否不超过限制

有任何想法吗?

编辑 我找到了解决方案。我还为第二个 where 子句使用了 HashSet 而不是 Dictionary。由于某种原因,似乎不可能在 LINQ 语句中进行字典查找(?)

4

1 回答 1

2

首先,虽然有点迂腐,但您在PreProcessQuery方法中所做的是“限制”查询中的记录,而不是“扩展”查询。

您在 LING 查询中输入的内容必须能够由实体框架数据提供程序(在 LS 的情况下为SQL Server 数据提供程序)处理。

有时您会发现,当您的 LINQ 查询编译时,它会在运行时失败。这是因为数据提供者无法将其表达到数据存储(在本例中也是 SQL Server)。

您通常仅限于“原始”值,所以如果您没有说使用Dictionary确实有效,我会说它不会。

每当您有一个静态(如不变)值时,我建议您在 LINQ 查询之外创建一个变量,然后在 LINQ 查询中使用该变量。通过这样做,您只是传递了一个值,数据提供者不必试图弄清楚如何将它传递给数据存储。

再次阅读您的代码,这可能不是您正在做的事情,但希望这个解释仍然会有所帮助。

于 2012-08-24T02:06:25.017 回答