【问题标题】:NHibernate 3.1 Query equalsNHibernate 3.1 查询等于
【发布时间】:2011-07-17 23:44:47
【问题描述】:

我刚刚从 NHibernate 2.1 更新到 NHibernate 3.1。我发现使用 Linq 的等号运算符并没有针对其他类型实现,然后是字符串。
我在网上找到了article 来解决这个问题。这适用于基本类型,但现在我想比较自定义实体,但无法正常工作。

我尝试了一些实现,但没有成功:

ReflectionHelper.GetMethodDefinition<CustomEntity>(x => x.Equals(<CustomEntity>(0)))  
ReflectionHelper.GetMethodDefinition<CustomEntity>(x => x.Equals(typeof(CustomEntity))

我要执行的查询如下:

Session.Query<SomeEntity>().Where(x => x.CustomEntity.Equals(CustomEntity);

如何扩展 equals 以允许这样做而不得到 NotSupportedException?

【问题讨论】:

  • 您不能或不想比较 CustomEntity 的 ID 是否有具体原因?
  • 我在构建通用基础存储库时遇到了同样的问题。以前我会有一个接口,它定义了我的模型的 Id 属性,然后按照 x => x.Id.Equals(default(IdType)) 的行做一些事情,其中​​ IdType 是一个泛型类型

标签: c# linq nhibernate equals


【解决方案1】:

.Equals 方法无法转换为 SQL,这是在您执行 Query() 方法时由系统完成的。尝试使用这样的公式:

Session.Query<SomeEntity>().Where(x => x.CustomEntity.Id == CustomEntity.Id);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    相关资源
    最近更新 更多