在我的灯开关应用程序中,我试图为具有余额值的客户创建一个客户屏幕,而我的余额值是客户实体中的一个计算字段
当我尝试将逻辑放入 Process Query Event 中时
query =( from i in query
where(i.Balance>0)
select i );
我有一个例外..处理这些情况的最佳方法是什么?我在这里看到了一个答案,但我不知道如何实现它我需要一个示例代码,任何人都可以帮助我吗?提前致谢
在我的灯开关应用程序中,我试图为具有余额值的客户创建一个客户屏幕,而我的余额值是客户实体中的一个计算字段
当我尝试将逻辑放入 Process Query Event 中时
query =( from i in query
where(i.Balance>0)
select i );
我有一个例外..处理这些情况的最佳方法是什么?我在这里看到了一个答案,但我不知道如何实现它我需要一个示例代码,任何人都可以帮助我吗?提前致谢
查询将由不知道计算字段的数据提供者执行。您可以做的是通过 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 事件处理程序中设置过滤器。但是,无论出于何种原因,当我这样做时,过滤器不会应用于屏幕。但即使这种方法可行,您仍然会在客户端进行过滤,这可能不是您想要的。
我实际上正在寻找解决这个问题的方法(不幸的是,我不能只包括计算字段中的计算,因为我的计算使用了另一个使用递归的计算字段)
我认为您可能会发现一些有用的指针:@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/
希望有帮助!