C# linq到nhibernate在查询中重用业务逻辑

C# linq到nhibernate在查询中重用业务逻辑,c#,fluent-nhibernate,repository,linq-to-nhibernate,C#,Fluent Nhibernate,Repository,Linq To Nhibernate,我正在从事一个项目,在这个项目中,我们使用fluent nhibernate并在我们的存储库中执行实体查询。我们通常编写如下查询: (from person in repository.Query<Person>() where person.Age > 18 where person.Age < 50 select person).Single(); (来自repository.Query()中的person) 年龄>18岁的人 年龄18岁和人年龄

我正在从事一个项目,在这个项目中,我们使用fluent nhibernate并在我们的存储库中执行实体查询。我们通常编写如下查询:

(from person in repository.Query<Person>()
where person.Age > 18 
where person.Age < 50
select person).Single();
(来自repository.Query()中的person)
年龄>18岁的人
年龄<50岁的人
选择person.Single();
显然,我们这里有一些逻辑,我们希望能够将其封装到更合理的地方。理想的解决方案是这样做:

(from person in repository.Query<Person>()
where personIsTheRightAge(person)
select person).Single();

bool personIsTheRightAge(Person person)
{
    return person.Age > 18 && person.Age < 50;
}
(来自repository.Query()中的person)
何处人员照明(人)
选择person.Single();
bool个人照明(个人)
{
返回人年龄>18岁和人年龄<50岁;
}
但是nhibernate不知道如何处理这个问题

我们可以为IQueryable提供扩展方法,但是如果我查询一个有司机的汽车实体,并且我需要重用相同的逻辑,那么这将不起作用

我只是想知道是否有人对如何以一种易于在整个项目中重复使用的方式解决这个问题有一些好的想法


提前感谢您的帮助

您可以使用DDD之类的东西来封装“正确年龄”逻辑:

usersRepository.FindByAgeSpec(RightAgeSpecification rightAge);


您还可能会发现了解存储库的情况很有意思。

您可以使用DDD之类的东西来封装“正确的年代”逻辑:

usersRepository.FindByAgeSpec(RightAgeSpecification rightAge);

您还可能会发现了解存储库是如何工作的很有趣