我刚刚学习 Linq 并遇到了问题。为了进行一些验证,我从数据库中获取最后一个里程表读数,并需要将其与下一个读数进行比较。里程表读数是传入数据上的 int 和数据库上的 double(在 dbml 文件上更改为 int)。
下面是我的代码:
private bool IsValidOdometer(string equipment, int odometerReading)
{
bool returnVariable = true;
CarteGraphDataDataContext db = new CarteGraphDataDataContext();
var odometer = (from p in db.EquipmentMainGenerals join q in db.EquipmentFuelLogs
on p.wdEquipmentMainGeneralOID equals q.wdEquipmentMainGeneralOID
where p.VehicleId == equipment
orderby q.Odometer descending
select q.Odometer).Take(1);
int previousOdometer = odometer;
if (odometer.Count() != 0)
{
if (odometerReading < previousOdometer)
{
returnVariable = false;
}
}
return returnVariable;
}
问题行是int previousOdometer = odometer;
。我得到的错误是:
Cannot implicitly convert type 'System.Linq.IQueryable' to 'int'
如何解决这个问题?
最佳答案
而不是 Enumerable.Take
使用Enumerable.Single
。 Enumerable.Take
将返回一个 IEnumerable
但 Enumerable.Single
将返回单个实例(或抛出):
int odometer = (from p in db.EquipmentMainGenerals
join q in db.EquipmentFuelLogs
on p.wdEquipmentMainGeneralOID
equals q.wdEquipmentMainGeneralOID
where p.VehicleId == equipment
orderby q.Odometer descending
select q.Odometer).Single();
int previousOdometer = odometer;
此外,我会在此处显式键入odometer
,而不是像您那样隐式键入。
最后是你的台词
CarteGraphDataDataContext db = new CarteGraphDataDataContext();
应该像这样在using
block 中
using(CarteGraphDataDataContext db = new CarteGraphDataDataContext()) {
// okay to go
}
关于c# - 对从 Linq2Sql 的 var 中获取 int 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2201315/