Как я могу заставить LINQ to SQL использовать IS NULL при запросах с пустой переменной? - PullRequest
1 голос
/ 03 апреля 2011

Извините, если раньше об этом спрашивали, но я просмотрел соответствующие вопросы и не смог найти ничего, относящегося к моей ситуации.

У меня есть запрос, который выглядит следующим образом.

var tempFoo = "";
var foo = tempFoo != "" ? tempFoo : null;

var result = Entities.Where(x => x.Bar == foo);

Bar - это string и обнуляемый varchar

Проблема заключается в том, что когда foo равен null, SQL, генерируемый LINQ to SQL, имеет вид:

([t0].[Bar] = @p0)

где должно быть:

([t0].[Bar] IS NULL)

Если я заменю foo на null в выражении LINQ to SQL, используется правильный синтаксис IS NULL.Однако иногда foo не равно нулю, поэтому мне приходится использовать переменную.

Так как же я могу заставить LINQ to SQL использовать IS NULL, когда foo равен null и=, когда foo не null?

PS: причина странного присвоения переменной в том, что tempFoo ссылается на именованный захват регулярных выражений.Если захват пустой, значение "", поэтому я должен проверить пустое значение и назначить null.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 03 апреля 2011

Здесь есть статья на эту тему: http://blog.linqexchange.com/index.php/how-to-use-is-null-with-linq-to-sql/

1 голос
/ 04 февраля 2014

В качестве ссылки, которую разместил Дан, для решения вы можете использовать:var result = Entities.Where (x => ((foo == null && x.Bar == null) || (x.Bar == foo));

Это работает для меня!

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