小编mur*_*rki的帖子

将LINQ扩展到Nhibernate提供程序,结合Dynamic LINQ问题

我正在使用NHibernate 3.1.0,我试图通过使用BaseHqlGeneratorForMethod和扩展,DefaultLinqToHqlGeneratorsRegistryFabio的帖子中所解释的那样扩展LINQ提供程序.

例如,为了支持ToString()我创建了ToStringGenerator如下所示.

internal class ToStringGenerator : BaseHqlGeneratorForMethod
{
    public ToStringGenerator()
    {
        SupportedMethods = new[]
            {
                ReflectionHelper.GetMethodDefinition<object>(x => x.ToString())
            };
    }

    public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor)
    {
        return treeBuilder.Cast(visitor.Visit(targetObject).AsExpression(), typeof(string));
    }
}
Run Code Online (Sandbox Code Playgroud)

我已经注册使用

internal class CustomLinqToHqlGeneratorsRegistry : DefaultLinqToHqlGeneratorsRegistry
{
    public CustomLinqToHqlGeneratorsRegistry()
    {
        this.Merge(new ToStringGenerator());
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止这适用于"静态"查询,我可以像这样使用它:

var results = mSession.Query<Project>();
string pId = "1";
results = results.Where(p => p.Id.ToString().Contains(pId));
Run Code Online (Sandbox Code Playgroud)

这正确转换为SQL对应(使用SQL Server …

.net c# linq nhibernate linq-to-nhibernate

6
推荐指数
1
解决办法
2547
查看次数

标签 统计

.net ×1

c# ×1

linq ×1

linq-to-nhibernate ×1

nhibernate ×1