Entity Framework - MySQL - Сравнение Null! - PullRequest
1 голос
/ 25 декабря 2009

Что не так со следующим кодом? (

int? parentFolderId = null;
if( this.Request.QueryString ["folderId"] != null )
    parentFolderId = Convert.ToInt32( this.Request.QueryString ["folderId"] );
f = ( from x in this.EntityDataContext.folders
        where x.parent_id == parentFolderId
        select x ).ToList();

ничего не возвращает! Хотя в базе данных есть записи с parent_id как NULL.

Однако, когда я явно заявляю NULL; это работает!

f = ( from x in this.EntityDataContext.folders
        where x.parent_id == null
        select x ).ToList();

В чем может быть проблема?

PS: я ненавижу работать с mysql, используя Entity Framework .... каждая чертовски простая вещь имеет миллион проблем!

Ответы [ 4 ]

3 голосов
/ 25 декабря 2009

Длинный выстрел

f = ( from x in this.EntityDataContext.folders
                where ((parentFolderId!=null && x.parent_id == parentFolderId)
                        ||(parentFolderId==null && x.parent_id == null))
                select x ).ToList();

Да, эти швы зашиты, и я думаю, ваш первый пример должен отлично работать с MsSql. Может быть, пришло время сообщить об ошибке авторам Linq в MySql?

1 голос
/ 25 декабря 2009

У меня была такая проблема на сервере sql, а на сервере sql сгенерированный запрос выглядит как «parent_id = null», когда вы работаете с пустым полем. И этот запрос ничего не возвращает, даже parent_id имеет значение null.

Сложный способ заключается в том, что вы должны заставить EF создать запрос типа "parent_id is null", а код, который я пробовал в linq, был;

if(parentFolderId.HasValue)
{
    f = ( from x in this.EntityDataContext.folders
                where x.parent_id == parentFolderId
                select x ).ToList();
}
else
{
    f = ( from x in this.EntityDataContext.folders
                where !x.parent_id.HasValue
                select x ).ToList();
}

Я знаю, что это не кажется идеальным способом сделать это, но именно так я мог бы избавиться от этой проблемы.

0 голосов
/ 19 февраля 2010

Это ошибка соединителя, и я сообщил об этом в mysql.

0 голосов
/ 25 декабря 2009

Вы, вероятно, обнаружите, что есть проблема, связанная с использованием DBNull или чего-то подобного. Я думаю, что во втором случае (где вы явно указываете «null») Linq автоматически преобразует его в DBNull в фоновом режиме.

возможно, попробуйте что-то вроде:

where x.parent_id == ( parentFolderId == null ? DBNull.Value : parentFolderId )

Надеюсь, что вы на правильном пути!

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