我使用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语句中进行字典查找答案 0 :(得分:2)
首先,虽然有点迂腐,但您在 PreProcessQuery 方法中所做的是在查询中“限制”记录,而不是“ extends < / em>“查询。
您在LING查询中放置的内容必须能够由实体框架数据提供程序处理(在LS的情况下, SQL Server数据提供程序)
有时您会发现在LINQ查询编译时,它会在运行时失败。这是因为数据提供程序无法将其表达到数据存储(在本例中也是SQL Server)。
你通常被限制在“原始”值,所以如果你没有说使用 Dictionary 实际工作,我会说它不会。
每当你有一个静态(如非变化)值时,我建议你在LINQ查询之外创建一个变量,然后在LINQ查询中使用该变量。通过这样做,您只需传递一个值,数据提供者不必试图弄清楚如何将其传递给数据存储。
再次阅读你的代码,这可能不是你正在做的,但希望这个解释仍然有用。