首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ActiveRecord、NHibernate、DetachedCriteria过滤对象

使用ActiveRecord、NHibernate、DetachedCriteria过滤对象
EN

Stack Overflow用户
提问于 2011-06-14 11:41:27
回答 1查看 962关注 0票数 0

C# 3.0,Nhibernate 2.1.2,城堡ActiveRecord 2.1,WinXP 32

使用ActiveRecord和DetachedCriteria过滤元素有问题。有两个表,一个包含要过滤的对象(PropertyContainer),另一个包含为该对象(PropertyValue)设置的动态属性的值。

代码语言:javascript
复制
PropertyContainer
 Id int

PropertyValue
 Id             int
 ContainerId    int
 Value          real

我需要从PropertyContainer表中选择与某些条件相匹配的值的PropertyValue对象(例如Id =1和值>2的属性)。我想用DetachedCriteria来做这件事,我试着写这样的东西:

代码语言:javascript
复制
var detachedCriteria = DetachedCriteria.For(typeof(PropertyContainer));

detachedCriteria.SetProjection(
    Projections.SqlProjection(@"select Value from PropertyValue where Id=1"),
    new[] { "ExternalProperty" }, 
    new[] { NHibernateUtil.Double }));  

detachedCriteria.Add(Expression.Ge("ExternalProperty",2));

var filteredItems = PropertyContainer.SlicedFindAll(0,100,detachedCriteria);

然后执行此调用,我得到以下错误:“未能解析属性: ExternalProperty of: PropertyContainer”

问题是:

  1. 这种方法有什么问题?
  2. 使用ActiveRecord/NHibernate和DetachedCriteria ?

进行动态属性集过滤的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-15 12:56:24

如果PropertyValue看起来像:

代码语言:javascript
复制
class PropertyValue
{
    public virtual int Id { get; set; }
    public virtual double Value { get; set; }
}

你可以:

代码语言:javascript
复制
DetachedCriteria.For<PropertyContainer>()
    .CreateAlias("PropertyValues", "prop")
    .Add(Restrictions.Ge("prop.Value", 2))
    .Add(Restrictions.Eq("prop.Id", 1));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6342918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档