2011-06-07 56 views
1

所以返回值我目前做了很多检查,像这样如何detemine如果序列具有东西,如果在LINQ

If (From p In table Where p.USER_ID = LoggedInUser.USER_ID And p.DATE >= start And p.DATE < [end] And p.PROJECT_ID = ProjectId Select p.Field).Any Then 
       Me.lblOverallTotal.Text = (From p In table Where p.USER_ID = LoggedInUser.USER_ID And p.DATE >= start And p.DATE < [end] And p.PROJECT_ID = ProjectId Select p.Field).Sum.ToString 
      Else 
       Me.lblOverallTotal.Text = "0.0" 
      End If 

然而这导致2分贝命中。 (一个以确定是否有任何再一个计算的总和。

我相信一定有这样做不太详细的方法,但我在努力寻找信达

回答

2

我会做这样的事情(切换到C#作为我的VB是弱):

var sum = (from p in table 
      where p.USER_ID == LoggedInUser.USER_ID 
      && p.DATE >= start 
      && p.DATE < end 
      && p.PROJECT_ID == ProjectId 
      select (float?)p.Field).Sum(); // use the correct data type here 

LINQ到SQL(SQL服务器提供)有一个怪癖这里,让null如果没有结果,即

Me.lblOverallTotal.Text = (sum ?? 0).ToString(); 

有关键点(用VB读取):切换到Nullable-of-the-typeSum()它。然后比较null