以下代码有什么问题? :(
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 ....每个该死的简单的东西都有数百万个问题!
答案 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上报告过。