如何检查列值是否具有“值”

时间:2019-07-01 10:17:53

标签: c# asp.net-mvc linq asp.net-core

我想检查“ Acceptance”的值是否为“ Accepted”,并且是否具有该值-。总之,我想得到0,但是在查找正确语法时存在一些问题。我无法获得“接受”值

我的方法

public decimal Prices2(string term)
{
   var kl= db.Order.Where(x => x.Client == term && x.Acceptance == "Accepted");
    if (term != null && kl.Acceptance == "Accepted" )
    {                       ^^//Element does not contain definition"Acceptance"
        return kl.Sum(x => x.Price);
    }
    else
    {
        return 0;
    }
}

我如何获得“任期”

public IEnumerable<string> GetClient(string term)
{
    return db.Order.Where(x => (term != null && x.Client.Contains(term)) || (term == null)).OrderBy(c => c.Client).Take(10).Select(a => a.Client).Distinct();
}

当我尝试这样做时:

return db.Order.Where(x => x.Client == term && x.Acceptance == "Accepted").sum(x=>x.Price)

当没有针对客户的“接受”订单时,我会收到错误消息

  

System.InvalidOperationException:“强制转换为值类型'System.Decimal'的原因是,因为实例化值为null。结果类型的通用参数或查询必须使用可为空的类型。”

我如何首先检查客户是否接受订单,如果有订单则返回0?

2 个答案:

答案 0 :(得分:1)

首先将查询分配给一个变量,

var orders = db.Order.Where(x => x.Client == term && x.Acceptance == "Accepted");
var result= orders.Count() > 0 ? orders.Sum(x=>x.Price) : 0.0M;
return result;

您返回的方法类型应为十进制

答案 1 :(得分:0)

首先,您的代码将无法运行,因为变量kl的类型为IEnumerable<Order>,它没有属性Acceptance

@ uk2k05在注释部分中提到的代码将解决您的问题:

return db.Order
    .Where(x => x.Client == term && x.Acceptance == "Accepted")
    .Sum(x => x.Price);

但是会出现另一个问题,这是因为Sum方法返回Nullable<Decimal>,而您的方法Prices2返回decimalClick to see docs

要解决此问题,您可以改用以下代码:

return db.Order
    .Where(x => x.Client == term && x.Acceptance == "Accepted")
    .Sum(x => x.Price) ?? 0;

这将返回Sum返回的值,如果返回的值为null,则返回0。

相关问题