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

查询HasMany参考

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

查询HasMany参考

由于 几乎 总是,NHibernate的确实有这个答案。我们在这里想要实现的是这样的SQL语句查找:

// final Request selectionSELECT request.[RequestId]  FROM [Request] request   // only requests, which are successful, and have Max(date)   WHERe request.[RequestId] IN    (     SELECt successResponse.RequestId as y0_       FROM [Response] successResponse        // response which max date is equal to the upper response        // and which RequestId corresponds with supper upper Request        WHERe EXISTS        (          SELECt maxResponse.RequestId as y0_, max(maxResponse.[DateTime]) as y1_FROM [Response] maxResponse// do the MAX only for current RequestWHERe maxResponse.RequestId = successResponse.RequestId GROUP BY maxResponse.RequestId// assure that the Response match is on the max DateTimeHAVINg max(maxResponse.[DateTime]) = successResponse.[DateTime]        )         AND successResponse.[Success] = 1   )

笔记:

  1. 期望 响应 确实有
    RequestId
  2. 上面是用C#
    //
    注释代替SQL
    --

现在,NHibernate和QueryOver的神奇之处在于:

// This declaration will allow us, to use a reference from middle SELECT// in the most deeper SELECTResponse response = null;// the most INNER SELECTvar maxSubquery = QueryOver.Of<Response>()   .SelectList(l => l    .SelectGroup(item => item.RequestId)    .SelectMax(item => item.DateTime)    )    // WHERe Clause   .Where(item => item.RequestId == response.RequestId)   // HAVINg Clause   .Where(Restrictions.EqProperty(      Projections.Max<Response>(item => item.DateTime),      Projections.Property(() => response.DateTime)    ));// the middle SELECTvar successSubquery = QueryOver.Of<Response>(() => response)    // to filter the Request    .Select(res => res.RequestId)    .WithSubquery    .WhereExists(maxSubquery)    // now only these wich are successful    .Where(success => success.Success == true)    ;

此时,我们必须嵌套内部SUB SELECT。让我们使用它们:

// the most outer SELECTvar query = session.QueryOver<Request>();query.WithSubquery    // our Request ID is IN(...    .WhereProperty(r => r.ID)    .In(successSubquery);var list = query    .List<Request>();

最后说明,我没有在讨论这个概念。没有表现。 我宁愿在响应“ IsActive”上使用一个设置,并使其更容易 …这仅仅是如何做到这一点的答案…



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

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

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