栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Nhibernate计数不同(基于多个列)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Nhibernate计数不同(基于多个列)

好的,这将采取一些步骤,请多多包涵。我在这里假设使用SQL Server,但说明应适用于支持

checksum
1的任何方言:

  1. 创建支持该

    checksum
    功能的自定义方言:

    public class MyCustomDialect : MsSql2008Dialect

    {
    public MyCustomDialect()
    {
    RegisterFunction(“checksum”, new SQLFunctionTemplate(NHibernateUtil.Int32, “checksum(?1, ?2)”));
    }
    }


  2. 更新配置以使用自定义方言(您可以在配置XML文件中或使用代码来执行此操作。有关更多信息,请参见此答案。这是我在现有配置代码中执行的操作:

    configuration.Configure(@"hibernate.cfg.xml").DatabaseIntegration(    db => db.Dialect<MyCustomDialect>());
  3. 创建一个调用的自定义投影

    checksum
    。此步骤是可选的-您可以根据需要
    Projections.SqlFunction
    直接调用,但是我认为将其重构为一个单独的函数更为简洁:

    public static class MyProjections

    {
    public static IProjection Checksum(params IProjection[] projections)
    {
    return Projections.SqlFunction(“checksum”, NHibernateUtil.Int32, projections);
    }
    }

  4. 编写您的QueryOver查询并调用自定义投影:

    int count = session.QueryOver<TableA>(() => tableAAlias).Where(p => p.PropertyA.IsLike("%123%")).Left.JoinQueryOver(p => p.TableB, () => tableBAlias).Select(    Projections.Count(        Projections.Distinct(        MyProjections.Checksum( Projections.Property(() => tableAAlias.PropertyA), Projections.Property(() => tableBAlias.PropertyB))))).SingleOrDefault<int>();

这应该生成看起来像您所追求的SQL:

    SELECT count(distinct checksum(this_.PropertyA, tableba1_.PropertyB)) as y0_FROM   [TableA] this_    left outer join [TableB] tableba1_    on this_.TableBId = tableba1_.IdWHERe  this_.PropertyA like '%123%' 

1仍在尝试找出是否有一种方法可以在不手动指定参数数量的情况下映射函数



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/614521.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号