添和Dipin构建财物时,First()
方法不幸引发InvalidOperationException查询的时候不会产生任何结果。
要么你用try/catch块
try{
var latest = (from d in db.CT_Decals
where d.TankID == decal.TankID && d.DecalStatus == "Approved"
orderby d.DecalExpireDate descending
select new
{
d.DecalExpireDate,
d.DecalExpireMonth,
d.DecalExpireYear
}).First();
var decalExpireDate = latest.DecalExpireDate;
var decalExpireMonth = latest.DecalExpireMonth;
var decalExpireYear = latest.DecalExpireYear;
}
catch(InvalidOperationException ex){ // tell no Result!}
围绕着它,或者你可以使用FirstOrDefault()
当查询产生不匹配,这将返回一个空引用。
//... Example from above
}).FirstOrDefault();
// check for null-reference
if(latest != null)
var decalExpireDate = latest.DecalExpireDate;
var decalExpireMonth = latest.DecalExpireMonth;
var decalExpireYear = latest.DecalExpireYear;
}
第三种可能性是采取使用Take(1)
//... Example from above
}).Take(1).ToList(); // returns an empty list if no match
// check whether something was returned
if(latest.Any())
var decalExpireDate = latest[0].DecalExpireDate;
var decalExpireMonth = latest[0].DecalExpireMonth;
var decalExpireYear = latest[0].DecalExpireYear;
}
第一要素你已经访问'DecalExpireDate',不是吗? – 2012-07-06 21:32:46
也许我正在写错误的查询。我只是带回DecalExpireDate,但我想要带回所有三个值...... – user1202606 2012-07-06 21:34:49
对不起,@user,我认为'Max'会返回所有三个字段。我更新了[我的回答](http://stackoverflow.com/a/11368703/480799)。 – 2012-07-07 15:42:15