将linq中的“string”和“null”与实体进行比较

时间:2014-11-29 09:00:03

标签: oracle linq entity-framework-4

我的代码:

string name;
db.Entities.Where(m=>m.name==(name??m.name))
throw:Should be CHAR, but get NCLOB.

// ----------------

  decimal? id;
  db.Entities.Where(m=>m.id==(id??m.id))
  The code is working.  

我的数据库是oracle 我该怎么做才能使代码正常工作。?

感谢。

2 个答案:

答案 0 :(得分:3)

请注意,在Oracle中,空字符串为NULL。

答案 1 :(得分:1)

我不了解Oracle + EF和类型映射。但这不是使谓词可选的方法,因为现在部分x ?? x.y将始终是转换为SQL的表达式的一部分。这可能会影响查询优化和性能。

这样做的方法是:

IQueryable<Entity> query = db.Entities;
if (!string.IsNullOrWhiteSpace(name))
{
    query = query.Where(m => m.Name == name);
}