【问题标题】:Get field value using LINQ query使用 LINQ 查询获取字段值
【发布时间】:2015-01-10 02:48:31
【问题描述】:

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

【问题讨论】:

  • 哪个值?您的查询可能返回多个值。
  • 如果费用数据计数大于零,是否需要将数据添加到 TempData 中?

标签: c# asp.net-mvc linq


【解决方案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();

【讨论】:

    【解决方案2】:

    您正在查询中选择一个集合。 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

    【讨论】:

      【解决方案3】:

      为什么要启动两个或更多变量?

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-31
        • 2015-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多