2

在我的LightSwitch应用程序我尝试创建一个客户筛选谁拥有平衡值的客户,我的平衡值是在客户实体如何在我的LightSwitch查询中使用计算的字段?

计算字段,当我试图把逻辑在过程查询事件像这样

query =(from i in query 

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

我得到一个异常..什么是最好的方式来处理这种情况? 我看到一个答案here,但我不知道如何实现它完全我需要一个示例代码它可以任何人都可以帮助我?提前

+0

_An exception_。现在你应该知道堆栈溢出时__不工作。尽管如此,正如答案所说,显然你不能以这种方式使用计算的字段。你想要什么样的代码?到目前为止,你尝试过什么? – 2012-03-01 12:20:07

+0

我试着在我的客户表上创建一个新的字段,我用客户验证事件来设置它的值等于我的余额计算字段..但那并没有工作 – 3oon 2012-03-01 13:22:46

回答

1

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

例如,假设平衡是你的计算字段,你定义为信贷 - 借方(这是正常的字段)。您希望您的查询返回的行收支> 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事件处理程序中设置一个过滤器。但是,无论什么原因,当我这样做时,过滤器不适用于屏幕。但即使这种方法可行,仍然可以在客户端进行筛选,这可能不是您想要的。

+0

我的信用和借记值是在不同的表中称为“ CustomersDebits“不在客户表本身。 我得到的借记值为 var SumDebit =(从CustomerDebits 中的d开始,其中d.Customer.CustomerId == CustomerId select d.Debit).Sum(); 和相同的信用.. 所以我还是不能做一个查询来获得所需的数据..请帮助 – 3oon 2012-03-03 19:15:48

+1

@ 3oon:请注意,对于您描述的情况,您可以在一个查询中执行此操作,例如:query =( from c查询 其中((从cr.CustomerCredits中选择cr选择cr.Amount) .Sum()) - (((从c.CustomerDebits中选择d.Amount).Sum()))> 0) select c);但尽管技术上仍然可行,但我不会那样做,但性能肯定不好。你有没有尝试在Sql Server视图中包装你的SQL,然后基于视图进行搜索? – 2012-03-03 22:34:30

+0

多数民众赞成在你的LINQ查询完全回答我的问题,关于我没有试图做的观点,我仍然不知道如何lightswitch处理意见,但我会搜索它 感谢很多人:) – 3oon 2012-03-04 06:44:19

1

实际上,我在寻找一个解决这个问题 (可惜我不能只包括计算字段的计算,因为我的计算使用它使用递归的另一个计算字段)

几个指针我想你可能会发现有用: @ julio.g - 在执行的事件处理程序,在“结果”参数是一个IEnumerable参数(而不是在PreProcess_Query事件处理程序,在“查询”参数是裁判的IEnumerable)因此对“结果”所做的任何更改只会在该方法中为局部的

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

希望帮助!