【问题标题】:Custom LINQ Query in LightswitchLightswitch 中的自定义 LINQ 查询
【发布时间】:2012-10-04 20:05:06
【问题描述】:

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

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

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

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

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

不涉及任何计算字段,我之前曾遇到过问题。我错过了什么?

【问题讨论】:

  • 您的 IntValue 可能为空。试试 query = query.Where(i => i.IntValue.HasValue && I.IntValue.Value == 100);

标签: visual-studio-lightswitch


【解决方案1】:

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

属性是:

  1. 属于 int 类型(不是 byteshortlong字符串等)

  2. 不可为空

您在论坛上的帖子中没有建议的一件事(实际上,我只是检查了帖子,并且实际上建议使用此语法 ,但我会留在这里给其他人,万一他们没有意识到有两种语法),是尝试“替代语法”。

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

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

【讨论】:

  • 感谢 Yann 和 Stackoverflow。我交叉发布,因为不是每个人都跟上这两个论坛。
  • 我会尽力提供帮助。我只是建议,如果您进行交叉发帖,请添加指向其他帖子的链接,就像您在回复中所做的那样。老实说,有时我会回答到一半,我对自己说“这听起来很熟悉,我不是在某个地方回答过这个问题吗”。很高兴您找到了解决方案。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2012-01-03
    • 1970-01-01
    • 2014-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 1970-01-01
    相关资源
    最近更新 更多