LINQ to SQL Возвращает нулевые значения - PullRequest
0 голосов
/ 08 июля 2011

У меня есть таблица, которая называется Employee.Некоторые из полей в таблице: CompanyId, SomeData

Я хочу запросить минимальную SomeDate на основе companyId.

Примерно так:

public DateTime? GetMinDateForCompany(long CompanyId)
{
         dataContext.Employees.Where(emp => emp.CompanyID == companyId).Select(emp => emp.SomeDate).Min();

}

Если нет соответствующего идентификатора компании, будет ли выдано исключение.Есть ли вероятность, что null может быть возвращен.В общем, когда будут возвращаться значения NULL для запроса LINQ-to-SQL.

Ответы [ 2 ]

2 голосов
/ 08 июля 2011

Вы должны вызвать метод Any (), чтобы убедиться, что у вас есть результаты.В противном случае вы будете вызывать Min () без результатов, что приведет к ошибке.

public DateTime GetMinPayrollDateForCompany(long CompanyId)
{
    if (dataContext.Payrolls.Any(proll => proll.CompanyID == companyId))
        return dataContext.Payrolls.Where(proll => proll.CompanyID == companyId).Select(proll => proll.PayrollDate).Min();
    else
        return new DateTime();

}

Чтобы ответить на ваши вопросы, я считаю, что запрос, не имеющий результатов для companyId, выдаст ошибку,Метод Any () будет вашим другом.Вызов других методов на пустых наборах приведет к ошибкам.

0 голосов
/ 08 июля 2011

Min вернет NULL в SQL.Это ожидается.Проблема возникает в C #, когда вы приводите результат.если тип не обнуляемый, вы получите ошибку, подобную следующей:

The null value cannot be assigned to a member with type System.DateTime which is a non-nullable value type.

Это потому, что C # будет основывать тип возвращаемого значения на поле, которое вы запрашиваете Min, в этом случае aDateTime (так работают дженерики).Но мы можем избежать этой ошибки, просто введя тип результата в пустую версию типа!

Ваш исходный запрос изменится на следующее:

dataContext.Payrolls
   .Where(proll => proll.CompanyID == companyId)
   .Min(proll => (DateTime?)proll.PayrollDate)

Это даст NULL результат вместо броска исключения.IIRC, если ваш исходный тип уже обнуляем, вам не понадобится набор типов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...