与NHibernate

时间:2016-01-22 07:27:03

标签: c# sql linq nhibernate

NHibernate在将字段比较为null时非常聪明。请考虑以下LINQ语句:

string s = null;
var rows = session.Query<Entity>
  .Where(e => e.SomeField == s)
  .ToList();

该语句转换为SQL查询

SELECT ...
FROM entity_table
WHERE some_field IS NULL;

在某些情况下,我不想要这种行为。我希望生成的查询包含some_field = NULL限制(永远不会成立)。

(怎么样)我可以指示NHibernate这样做吗?或者我是否必须编写两个查询并在代码中明确处理null-case?

请注意,这是在NHibernate的上下文中,而不是linq-to-sql。 NHibernate无法将object.Equals(e.SomeField, s)转换为SQL查询。此外,与当前null的变量进行比较并直接与null关键字进行比较,将会产生与NHibernate相同的查询。

1 个答案:

答案 0 :(得分:1)

您可以使用string s = null; var rows = session.QueryOver<Entity>() .Where(Expression.Eq(Projections.Property<Entity>(x => x.SomeField), s)) .List(); ,但会生成参数化查询:

angular.module('secrunApp').service('appState', function () {

  this.currentAnswerset = 1;
  this.currentQuestion = 2;
  this.name;

  function set(key, value) {
    console.log('>> set appStateModel', key, value);
    var localVar = key;
    this[localVar] = value;
  }

  function get(key) {
    console.log('<< get appStateModel', key, this[key]);
    return this[key];
  }

  return {
    get: get,
    set: set
  }
});