基本上,当我执行下面的查询时,如果没有匹配到线索,下面的查询将抛出异常。在这种情况下,我宁愿让和等于0,而不是抛出异常。 这在查询本身中可能吗-我的意思是,而不是存储查询并检查query. any () ?

double earnings = db.Leads.Where(l => l.Date.Day == date.Day
                && l.Date.Month == date.Month
                && l.Date.Year == date.Year
                && l.Property.Type == ProtectedPropertyType.Password
                && l.Property.PropertyId == PropertyId).Sum(l => l.Amount);

当前回答

Try:

双倍收益= db.Leads。Where(l => l. shouldbeincluded)。总和(l = > (两倍?)l.数量)??0;

查询“SELECT SUM([Amount])”对于空列表将返回NULL。 但是如果你使用LINQ,它期望“Sum(l => l. amount)”返回double,它不允许你使用“??”操作符将空集合设置为0。

为了避免这种情况,你需要让LINQ期望“double?”你可以通过输入“(double?)l.Amount”来实现。

它不影响对SQL的查询,但它使LINQ为空集合工作。

其他回答

db.Leads.Where(l => l.Date.Day == date.Day
        && l.Date.Month == date.Month
        && l.Date.Year == date.Year
        && l.Property.Type == ProtectedPropertyType.Password
        && l.Property.PropertyId == PropertyId)
     .Select(l => l.Amount)
     .ToList()
     .Sum();

我更喜欢使用另一种方法:

double earnings = db.Leads.Where(l => l.Date.Day == date.Day
                                      && l.Date.Month == date.Month
                                      && l.Date.Year == date.Year
                                      && l.Property.Type == ProtectedPropertyType.Password
                                      && l.Property.PropertyId == PropertyId)
                          .Sum(l => (double?) l.Amount) ?? 0;

另一个选项是强制转换值,如下面的代码所示

(decimal?)(x.TicketDetails.Sum(y => y.Cost *y.Qty)) ?? 0

Try:

双倍收益= db.Leads。Where(l => l. shouldbeincluded)。总和(l = > (两倍?)l.数量)??0;

查询“SELECT SUM([Amount])”对于空列表将返回NULL。 但是如果你使用LINQ,它期望“Sum(l => l. amount)”返回double,它不允许你使用“??”操作符将空集合设置为0。

为了避免这种情况,你需要让LINQ期望“double?”你可以通过输入“(double?)l.Amount”来实现。

它不影响对SQL的查询,但它使LINQ为空集合工作。

这对我来说就是胜利:

int Total = 0;
Total = (int)Db.Logins.Where(L => L.id == item.MyId).Sum(L => (int?)L.NumberOfLogins ?? 0);

在我的登录表,在字段NUMBEROFLOGINS一些值是NULL和其他人有一个INT数字。我在这里合计一个公司所有用户的登录总数(每个Id)。