Я хотел бы знать, почему эти два запроса LINQ разные или почему один работает, а другой нет? Очевидно, компилятор говорит, что они разные, но я не могу понять, почему?

Я хочу, чтобы первый запрос работал, но что бы я ни делал, это не сработает.

Приведенный ниже запрос LINQ дает мне ошибку:

Невозможно неявно преобразовать тип int? в 'System.Collections.Generic.IEnumerable'

public static IEnumerable<int?> GetTenantFacilityCosts(int? code, DateTime date, int number)
    {
        return DataContext.Facility_Cost_TBLs.
               Where(p => p.Tenant_Code == code &&
                          p.Code_Date == number &&
                          p.Date_Year == date.Year &&
                          p.Date_Month == date.Month).
                          FirstOrDefault().Tenant_Portion;
    }

Но этот запрос ниже получает значение int, которое я пытаюсь получить, и не вызывает ошибки.

int? facilityCost = 
        DataContext.Facility_Cost_TBLs.
        Where(p => p.Tenant_Code == selectedTenant.Tenant_Code &&
                   p.Code_Date == 10 &&
                   p.Date_Year == date.Year &&
                   p.Date_Month == date.Month).
                   FirstOrDefault().Tenant_Portion;

Почему эти два запроса разные и как заставить первый работать правильно?

-7
KyloRen 25 Ноя 2016 в 19:04

2 ответа

Лучший ответ

Запрос Linq возвращает значение int, допускающее значение NULL, то есть int?, причина, по которой он работает для второго, заключается в том, что он присваивает значение int?.

Второй возвращает int? для метода, который пытается вернуть: IEnumerable<int?>. Если вы хотите вернуть перечислимое количество результатов, вам необходимо удалить FirstOrDefault из запроса. И судя по названию метода, то есть множественному числу Costs, это то, что вам нужно.

Однако, если вам нужен только один результат, измените подпись метода на:

public static int? GetTenantFacilityCosts(int? code, DateTime date, int number)
2
TheLethalCoder 25 Ноя 2016 в 16:08

Как видно из того, что работает, результатом вашего запроса является int?. Когда вы превратили это в функцию, тип возврата вашей функции будет IEnumerable<int?>.

Вы должны работать

public static int? GetTenantFacilityCosts(int? code, DateTime date, int number)
{
  ...
}
3
Jamiec 25 Ноя 2016 в 16:07