我想检查“ 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?
答案 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
返回decimal
。 Click to see docs
要解决此问题,您可以改用以下代码:
return db.Order
.Where(x => x.Client == term && x.Acceptance == "Accepted")
.Sum(x => x.Price) ?? 0;
这将返回Sum
返回的值,如果返回的值为null
,则返回0。