在我的lightswitch应用程序中,我试图为拥有余额值的客户创建一个客户屏幕,我的余额值是客户实体中的计算字段
当我试图将逻辑放在像这样的过程查询事件中
query =( from i in query
where(i.Balance>0)
select i );
我得到一个例外..处理这类情况的最佳方法是什么? 我看到了答案here但我不知道如何实现它我需要一个示例代码,任何人都可以帮助我? 提前谢谢
答案 0 :(得分:1)
查询将由数据提供程序执行,数据提供程序不知道计算字段。您可以做的是通过LINQ过滤您想要的内容,参考实际字段,而不是计算字段。
例如,假设Balance是您计算的字段,您定义为Credit - Debit(它们是普通字段)。您希望查询返回Balance>的行这就是你编写查询的方式(在PreprocessQuery事件中,注意没有ProcessQuery事件):
partial void TestQuery_PreprocessQuery(ref IQueryable<Customer> query)
{
query = (
from c in query
where ((c.Credit - c.Debit) > 0)
select c);
}
解决问题的另一种理论方法是在Executed事件处理程序中设置过滤器。但是,无论出于何种原因,当我这样做时,过滤器不会应用于屏幕。但即使这种方法有效,你仍然会在客户端过滤,这可能不是你想要的。
答案 1 :(得分:1)
我实际上是在寻找这个问题的解决方案 (不幸的是,我不能只包括计算字段中的计算,因为我的计算使用另一个使用递归的计算字段)
我认为您可能会发现有用的几点: @ 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/
希望有所帮助!