我有一个知道映射的hibernate类的Type的存储库对象。但它没有通用的<T>
类型,而是对Type对象Type TheMappedType
的引用。所以我做不了类似的事情:
session.QueryOver<typeof(TheMappedType)>()...
。
通常我可以用hibernate做的是:
session.Get(typeof(TheMappedType), someId)
。
那么大概是什么:我的存储库是一个具有通用接口类型的泛型类。我想在这个接口上传递一些lambda函数(比如一些get方法中的限制)并且我希望它被转换为实际映射的类型......有没有办法做到这一点?
谢谢 最大
答案 0 :(得分:2)
您可以使用TheMappedType.MakeGeneric(params)使您的referened类型通用,然后在QueryOver方法中使用它。如果您将任何lambda函数传递给您的存储库,那么它会自动将其转换为您的泛型类型。
我在我的存储库中执行了以下操作
System.Linq.Expressions.Expression<Func<Employee, bool>> expression = items => items.Name == "abc";
IList employeeList = Repository<Employee>.FindRecords(expression)
并且存储库类具有以下方法:
Repository<T>
{
IList< T > FindRecords(System.Linq.Expressions.Expression<Func<T, bool>> expression)
{
return Session.QueryOver<T>().Where(expression).List();
}
}