实体框架 - MySQL - 空比较!

时间:2009-12-25 07:17:12

标签: mysql entity-framework null

以下代码有什么问题? :(

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();

它什么都不返回!虽然数据库中有ARE记录,其中parent_id为NULL。

然而,当我显式地声明NULL;它有效!

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

可能是什么问题?

PS:我讨厌使用实体框架使用mysql ....每个该死的简单的东西都有数百万个问题!

4 个答案:

答案 0 :(得分:3)

远射

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 :(得分:1)

我在sql server和sql server中遇到过这样的问题,当你在一个可空的字段上工作时,生成的查询看起来像“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();
}

我知道这似乎不是一个完美的方法,但是,这就是我摆脱这个问题的方法。

答案 2 :(得分:0)

您可能会发现存在涉及使用DBNull或类似问题的问题。我认为在第二种情况下(你明确声明“null”),Linq会在后台自动将其转换为DBNull。

也许尝试一下以下几点:

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

希望能让你走上正轨!

答案 3 :(得分:0)

这是连接器错误,我在mysql上报告过。