基本上,当我执行下面的查询时,如果没有匹配到线索,下面的查询将抛出异常。在这种情况下,我宁愿让和等于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);

试着把你的查询改为这样:

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)
         .DefaultIfEmpty(0)
         .Sum();

这样,您的查询将只选择Amount字段。如果集合为空,它将返回一个值为0的元素,然后应用求和。


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

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;

试试这个吧,它更简短:

db.Leads.Where(..).Aggregate(0, (i, lead) => i + lead.Amount);

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();

这对我来说就是胜利:

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

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


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为空集合工作。


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

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