0

我对 LINQ 在 PreprocessQuery 中的工作方式感到困惑。我一直在对自定义搜索屏幕的更大查询问题进行故障排除。除了我最终隔离的一小部分之外,其余的查询似乎都有效:

query = query.Where(i => i.IntValue == 100); 

即使数据库显然具有匹配的值,这也不会返回任何结果。

但是,以下方法确实有效:

query = query.Where(i => i.StringValue == "value"); 

没有涉及任何计算字段,我以前见过这些问题。我错过了什么?

4

2 回答 2

0

正如我在 LightSwitch 论坛中回复您的问题时所说,我在PreProcessQuery方法中一直使用这种类型的比较,因此如果检查了以下场景,则不应发生此错误。

该物业是:

  1. int类型(不是byteshortlongstring等)

  2. 不可为空

在您发给论坛的帖子中没有建议的一件事(实际上,我只是检查了帖子,实际上建议使用此语法但是我将把它留给其他人,以防他们没有意识到有两个语法),是尝试“替代语法”。

query = from q in query 
        where q.IntValue == 100
        select q;

语法不应该有任何区别,但话又说回来,错误也不应该发生。

于 2012-10-05T01:08:27.813 回答
0

在这种特殊情况下,我发现我有一个使用 Lightswitch 查询设计器构建的查询的残余。两个查询可以共存并相互补充,但(如在本例中)它们也可能相互干扰。从设计器清除查询后,我的基于代码的查询运行良好。

为了将来参考,如果您从设计器中的查询开始,并决定切换,您应该记住清除设计器中的内容。在Lightswitch 论坛帖子中,Yann 提到他总是默认使用代码构建查询,如果您有比简单查询更多的东西,这可能是一个不错的主意。

于 2012-10-10T21:54:10.510 回答