代码是这样:
var broadcasts = repository.FindBySpecification(m => m.SendToCompanyId==null);
按理说会返回表里SendToCompanyId is null 的数据,但是没有,却生成了如下的sql
SELECT
CAST(NULL AS uniqueidentifier) AS [C1],
CAST(NULL AS varchar(1)) AS [C2],
CAST(NULL AS datetime) AS [C3],
CAST(NULL AS uniqueidentifier) AS [C4],
CAST(NULL AS uniqueidentifier) AS [C5]
FROM ( SELECT 1 AS X ) AS [SingleRowTable1]
WHERE 1 = 0
牛头不对马嘴,EF这样做只是为了填充一个空白的集合。
那么问题来了,我要怎么才能获得SendToCompanyId is null 的数据。
在线等……
SendToCompanyId这个属性是什么类型的??
Guid? 可空类型
@鲜宏: 那就有点奇葩了。你把FindBySpecification这个方法贴一下...
@幻天芒:
public virtual IEnumerable<TEntity> FindBySpecification(Expression<Func<TEntity, bool>> where)
{
var ie= DataContext.CreateObjectSet<TEntity>().Where(where);
ie.ToList().ForEach(m => m.RepositoryProvider = this);
return ie;
}
@鲜宏: DataContext.Set<TEntity>().Where(where),用下这个呢~
@鲜宏: 不应该出现这种问题才对,我表示用EF的时候没遇到过~
@幻天芒: 好吧,多谢
听说是这样的
var broadcasts = repository.where(m => m.SendToCompanyId==null);
或者是这样的
var qury= from c in repository
where c.SendToCompanyId==null
select c;
我也是这样写的。DataContext.CreateObjectSet<TEntity>().Where(where);
@鲜宏: 你有其他地方的代码错误造成的。
请做一个最简单的EF项目,测试一下WHERE用法即知。
dbnull吧。null不是数据库意义的null。