Запутался в получении int из var от Linq2Sql - PullRequest
2 голосов
/ 04 февраля 2010

Я только изучаю Linq и столкнулся с проблемой. Для некоторой проверки я получаю последние показания одометра из нашей базы данных, и мне нужно сравнить их со следующим показанием. Показания одометра - это int для входных данных и двойное значение для базы данных (в файле 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;. Я получаю ошибку:

Невозможно неявно преобразовать тип 'System.Linq.IQueryable' в 'int'

Как мне это исправить?

1 Ответ

4 голосов
/ 04 февраля 2010

Вместо 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 блоке, например

using(CarteGraphDataDataContext db = new CarteGraphDataDataContext()) {
    // okay to go
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...