Приложение должно соответствовать следующим требованиям:
- Возврат только тех заказов, у которых значение OrderDate отличается от нуля.
- Возврат только заказов которые были помещены в год, указанный в параметре year
Кроме того, строка 1, кажется, показывает вам определение OrderDate
public DateTime? OrderDate;
Вопрос говорит вам что OrderDate
является обнуляемым DateTime
объектом, и вам нужно проверить, что он имеет значение.
Редактировать: Я попробовал это для себя, используя SQLEXPRESS и LINQPad 5, и теперь я вижу, что ответ A работает в контексте LINQ для SQL, поскольку он преобразуется в
WHERE DATEPART(Year,OrderDate) = @year
, и это отфильтровывает нулевые значения OrderDates.
Все, что я могу сказать, это то, почему я считаю, что ответ B - это «предпочтительный» ответ.
Ответ A во всех других C# контекстах вызовет InvalidOperationException «Обнуляемый объект должен иметь значение», и это просто работает в этом контексте, потому что Это LINQ to SQL.
Ответ B будет работать как в контексте C#, так и в контексте LINQ to SQL, поэтому из двух возможных ответов он является самым безопасным и будет помочь вам избежать использования ответа типа А в контексте, когда он не получится. Кроме того, я считаю, что он более четко и недвусмысленно сообщает о том, что вы хотите отфильтровать нулевые даты заказа. При дополнительной проверке нулевого значения может произойти незначительное снижение производительности, но если не будет проблемы с измеримой производительностью, удобочитаемость важнее, чем незначительные улучшения производительности. Если бы я использовал ответ A, я бы включил множество комментариев, описывающих поведение LINQ to SQL, объясняющих, почему проверка на ноль не нужна.