c# - 对从 Linq2Sql 的 var 中获取 int 感到困惑

标签 c# .net linq linq-to-sql

我刚刚学习 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.SingleEnumerable.Take 将返回一个 IEnumerableEnumerable.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/

相关文章:

c# - 在 C# 中随机化数学符号

c# - C# 从视频流中获取图像

.net - TabControl 总是根据选定的选项卡项目调整大小?

c# - 如何在 GridViewColumn 中将值显示为图像?

c# - 正确处理 lambda 表达式中可能出现的 System.NullReferenceException

c# - 如何在 C# 中将 LParam 转换为 Struct

c# - 清除 TreeView

c# - 从数据集中获取单个值的最佳方法是什么?

vb.net - 将每个嵌套转换为 linq

c# - 如何优化 LINQ 查询?