使用LINQ查询获取字段值

时间:2015-01-09 18:34:29

标签: c# asp.net-mvc linq

我需要在此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语句。简单的事情,但我想节省一些时间。

3 个答案:

答案 0 :(得分:1)

您的费用是IQ​​ueryable,您必须使用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();