灯开关LINQ预处理查询

时间:2012-08-23 11:14:07

标签: c# linq silverlight visual-studio-lightswitch

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

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

其中 validIDs HashSet(int) elementCount Dictionary(int,int)。 第一个where子句工作正常,但第二个 - &gt; elementCount [item.ID]&lt; = maxEleCount  没有用。

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

有什么想法吗?

修改 我找到了解决方案。我没有使用字典而是使用HashSet作为第二个where子句。由于某种原因(?)

,似乎无法在LINQ语句中进行字典查找

1 个答案:

答案 0 :(得分:2)

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

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

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

你通常被限制在“原始”值,所以如果你没有说使用 Dictionary 实际工作,我会说它不会。

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

再次阅读你的代码,这可能不是你正在做的,但希望这个解释仍然有用。