如何确定序列是否有项,如果有则返回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

然而,这会导致两次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-typeSum()。然后与null进行比较。

相关内容

  • 没有找到相关文章

最新更新