我需要在此linq查询中获取费用的值并将其传递给另一个控制器。
我试过这个
var fee = from f in db.Certificates
where f.ID == traveler.CertificateID && f.Fee>0
select f.Fee;
int q = fee.Count();
string famount = fee.ToString();
if (q > 0)
{
TempData["famount"] = famount;
}
但是它传递了sql语句。简单的事情,但我想节省一些时间。
答案 0 :(得分:1)
您的费用是IQueryable,您必须使用FirstOrDefault()
来获取价值
var fee = from f in db.Certificates
where f.ID == traveler.CertificateID && f.Fee>0
select f.Fee;
string famount = fee.FirstOrDefault().ToString();
答案 1 :(得分:1)
您正在查询中选择一个集合。 select f.Fee
会返回IQueryable<T>
/ IEnumerable<T>
。
看来,由于您选择基于ID
,因此您应该获得单个结果。使用SingleOrDefault
之类的:
var fee = (from f in db.Certificates
where f.ID == traveler.CertificateID && f.Fee>0
select f.Fee).SingleOrDefault();
if (fee != null)
{
TempData["famount"] = fee;
}
您也可以在SingleOrDefault
中传递条件,如:
var fee = db.Certificates.SingleOrDefault(f => traveler.CertificateID && f.Fee > 0);
如果找到符合条件的多个项目, SingleOrDefault
将抛出异常。如果是这种情况(并且您没有选择唯一ID)那么请使用FirstOrDefault
答案 2 :(得分:1)
为什么要启动两个或更多变量?
TempData["famount"] = db.Certificates.Where(f=>f.ID == traveler.CertificateID && f.Fee>0).FirstOrDefault.Count();