2015-01-09 102 views
0

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

+1

哪个值?您的查询可能会返回多个值。 – 2015-01-09 18:37:43

+0

是什么关系将数据添加到TempData的ONY的情况下,如果费用数据的数量是大于零? – 2015-01-09 18:40:29

回答

0

你的费用是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(); 
0

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

0

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

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