我目前做了很多类似的检查
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
然而,这会导致两次db命中。(一个用于确定是否有,然后一个用于计算总和。
我确信必须有一个不那么详细的方法来做到这一点,但我很难找到语法
我会做一些类似的事情(切换到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 to SQL(由SQL服务器提供)有一个弱点,如果没有结果,它会给出null
,即
Me.lblOverallTotal.Text = (sum ?? 0).ToString();
这里的关键点(将其读为VB):切换到Nullable-of-the-type
和Sum()
。然后与null
进行比较。