【问题标题】:How to use calculated fields in my LightSwitch Query?如何在我的 LightSwitch 查询中使用计算字段?
【发布时间】:2012-03-01 09:49:16
【问题描述】:

在我的灯开关应用程序中,我试图为具有余额值的客户创建一个客户屏幕,而我的余额值是客户实体中的一个计算字段

当我试图将逻辑放入 Process Query Event 中时

query =( from i in query

where(i.Balance>0)
select i );

我得到一个例外.. 处理这种情况的最佳方法是什么? 我看到了一个答案here,但我不知道如何实现它我需要一个示例代码,任何人都可以帮助我吗? 在此先感谢

【问题讨论】:

  • 异常。您现在应该知道 在 Stack Overflow 上不起作用。尽管如此,正如答案所说,很明显您不能以这种方式使用计算字段。你想要什么示例代码?到目前为止,您自己尝试了什么?
  • 我尝试在我的客户表上创建一个新字段,并使用客户验证事件将其值设置为等于我的余额计算字段..但这并不奏效

标签: linq wcf-ria-services visual-studio-lightswitch calculated-field


【解决方案1】:

查询将由不知道计算字段的数据提供者执行。您可以做的是通过 LINQ 过滤您想要的内容,参考实际字段,而不是计算出来的字段。

例如,假设余额是您的计算字段,您将其定义为贷方 - 借方(这是普通字段)。您希望查询返回 Balance > 0 的行。这就是您编写查询的方式(在 PreprocessQuery 事件中,请注意没有 ProcessQuery 事件):

partial void TestQuery_PreprocessQuery(ref IQueryable<Customer> query)
{
    query = (
        from c in query
        where ((c.Credit - c.Debit) > 0)
        select c);
}

解决问题的另一种理论方法是在 Executed 事件处理程序中设置过滤器。但是,无论出于何种原因,当我这样做时,过滤器不会应用于屏幕。但即使这种方法可行,您仍然会在客户端进行过滤,这可能不是您想要的。

【讨论】:

  • 我的贷方和借方值在名为“CustomersDebits”的不同表中,而不是在客户表本身中.. 我得到借方值 var SumDebit =(来自 CustomerDebits 中的 d,其中 d.Customer.CustomerId == CustomerId 选择 d.Debit).Sum();信用也是如此..所以我仍然无法进行一次查询以获取所需的数据..请帮助
  • @3oon:请注意,仍然在您描述的情况下,您可以在一个查询中执行此操作,例如:query = ( from c in query where (((from cr in c.CustomerCredits select cr .Amount).Sum()) - (((从 c.CustomerDebits 中的 d 选择 d.Amount).Sum())) > 0) 选择 c);但是虽然在技术上仍然可行,但我不会那样做,性能肯定不好。您是否尝试将 sql 包装在 Sql Server 视图中,然后基于该视图进行搜索?
  • 这完全用你的 linq 查询回答了我的问题,关于我没有尝试做的视图,我仍然不知道 lightswitch 如何处理视图,但我会搜索它,非常感谢: )
  • 如果我的比较值不是固定的(在本例中为 0)而是一个参数怎么办?
【解决方案2】:

我实际上正在寻找解决此问题的方法 (不幸的是,我不能只包括计算字段中的计算,因为我的计算使用了另一个使用递归的计算字段)

我认为您可能会发现一些有用的建议: @julio.g - 对于 Executed 事件处理程序,“result”参数是一个 IEnumerable 参数(与 PreProcess_Query 事件处理程序相反,其中“query”参数是一个 ref IEnumerable)所以任何更改你对“结果”所做的只会是该方法的本地

@3oon - afaik,LightSwitch 不支持 SQL 视图。到目前为止,我遇到的最佳选择是基于存储过程创建 WCF RIA 服务,然后将其添加为数据源。 这篇博文应该可以帮助您入门。 http://tejana.wordpress.com/2010/12/09/microsoft-lightswitch-and-stored-procedures-using-wcf-ria-services/

希望有帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 1970-01-01
    • 2022-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多