與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?