Что происходит, так это то, что первый пример кода полностью решает проблему в T-SQL. К сожалению, перевод с C # на SQL не совсем прозрачен.
SQL обрабатывает нулевые значения иначе, чем .NET. SELECT 'Foo' + NULL + 'Bar'
вернет NULL
. Вам нужно будет использовать COALESCE или что-то подобное. В LINQ to SQL это означает:
(n.FIRSTNAME ?? "" + n.MIDDLENAME ?? "" + n.LASTNAME ?? "").Replace(" ", "")
Если вы используете это, оно должно работать нормально.
Если вам интересно, вы можете использовать db.GetCommand(IQueryable<T>)
, чтобы получить сгенерированный оператор SQL. Он также доступен, когда вы наведите курсор на переменную IQueryable в фрагменте исходного кода во время отладки.
*: это обычно зависит от некоторых параметров базы данных, которые вы можете установить, но это поведение по умолчанию.