ОК, указанный вами запрос LINQ
будет переведен в синтаксис SQL
, например:
SELECT
[t0].[Title1],
[t0].[TitleID],
(CASE
WHEN [t0].[TitleID] = @p1 THEN 1
WHEN NOT ([t0].[TitleID] = @p1) THEN 0
ELSE NULL
END) AS [Value]
FROM [dbo].[Titles] AS [t0]
где @p1
на самом деле ваша selectedtitleid
переменная.
Теперь представьте, что selectedtitleid = null
. Это означает, что ни первое условие, ни второе в блоке CASE
не будут выполнены. Это связано с тем, что нулевое значение в SQL
(null
не равно любому другому значению, даже null
). Поэтому, когда значение selectedtitleid
равно null
, будет возвращено значение null
для поля [Value]
. Вот почему вы получите свое исключение.
Обходной путь - изменить ваш код:
var titles = from t in dc.Titles
select new SelectListItem
{
Text = t.Title1,
Value = t.TitleID.ToString(),
Selected = ((t.TitleID ?? 0) == (selectedtitleid ?? 0))
};
Это означает, что вместо null
будет сравнение целых чисел. Так что если t.TitleID
равно null
и selectedtitleid
равно null
, Selected
будет установлено в значение true.