与SQL方法扩展IQueryable的我用流利的NHibernate的,我需要从查询randomnize的结果,我想是这样的:NHibernate的,通过扩展DefaultLinqToHqlGeneratorsRegistry
select * from table order by newid()
的方式,应延长NHibernate的IQueryable
发电机使用像QueryableExtension.RandomOrder<T>(this IQueryable<T> list)
的方法通过博客在这里:http://fabiomaulo.blogspot.dk/2010/07/nhibernate-linq-provider-extension.html 这:Extending LINQ to Nhibernate provider, in combination with Dynamic LINQ problem
我写了这个代码:
public class RandomOrderGenerator : BaseHqlGeneratorForMethod
{
public RandomOrderGenerator()
{
SupportedMethods = new[]
{
ReflectionHelper.GetMethod(() => Enumerable.Empty<object>().AsQueryable().RandomOrder()),
ReflectionHelper.GetMethod(() => Enumerable.Empty<long>().AsQueryable().RandomOrder()),
};
}
public override HqlTreeNode BuildHql(MethodInfo method, System.Linq.Expressions.Expression targetObject, ReadOnlyCollection<System.Linq.Expressions.Expression> arguments,
HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor)
{
throw new NotImplementedException();
}
}
public class MyLinqToHqlGeneratorsRegistry : DefaultLinqToHqlGeneratorsRegistry
{
public MyLinqToHqlGeneratorsRegistry()
{
RegisterGenerator(ReflectionHelper.GetMethod(() => Enumerable.Empty<object>().AsQueryable().RandomOrder()), new RandomOrderGenerator());
}
}
我已经配置为使用MyLinqToHqlGeneratorsRegistry
时,它会创建的,我RandomOrderGenerator
被创建,但BuildHql
方法不会被调用。
使用该扩展:
repository.Query<Table>().Take(10).RandomOrder().Select(x => x.Id);
的SupportMethods
和RegisterGenerator
方法定义应该是一样的,但为什么我不能得到它来生成HQL?