使用 LINQ 查询获取字段值

Get field value using LINQ query

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

您的费用是可查询的,您必须使用 FirstOrDefault() 来获取价值

var fee = from f in db.Certificates
          where f.ID == traveler.CertificateID && f.Fee>0
          select f.Fee;

string famount = fee.FirstOrDefault().ToString();

您正在查询中选择一个集合。 select f.Fee 会 return 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

为什么要初始化两个或多个变量?

TempData["famount"] = db.Certificates.Where(f=>f.ID == traveler.CertificateID && f.Fee>0).FirstOrDefault.Count();