将Expression作为参数传递给Generic方法,并将Expression插入CreateCriteria?

时间:2010-08-10 10:49:53

标签: c# nhibernate generics lambda

我有一个EntityRepository中存在的泛型方法,它通过Name获取实体,其定义如下:

    public IEnumerable<T> GetEntitiesByName<T>(string searchExpression)
        where T : class, ISearchableEntity, new()
    {
            return  _session.CreateCriteria<T>()
                .Add(LambdaSubquery.Property<Fund>(x => x.Id)
                .AddNameSearchCriteria<T>(searchExpression)
                .List<T>();
    }

有许多服务使用这种方法,一切都很好..但我现在要求某些服务需要比此方法更具体的搜索功能。

所以我想知道我是否可以将DetachedCriteria传递给我可以插入查询的表达式(或其他东西)?每个需要不同功能的服务都可以传递它所需的表达式。

我对NHibernate或Expressions并不是很熟悉,所以我可能在这里不够深入。我主要是想要了解可能的事情。否则,我将不得不放弃泛型方法,而是为每个服务使用更具体的Repository方法。感谢。

1 个答案:

答案 0 :(得分:0)

我在my answer to a somewhat similar question中发布了一个可能对您有帮助的代码示例。然而,这只是一个艰难的开始。如果你真的想将完整的LINQ表达式翻译成NHibernate并且有一些完整性,我建议先搜索现有的解决方案。 Google快速搜索就找到了我: