代码之家  ›  专栏  ›  技术社区  ›  Dave The Ninja

如何从集合的父级返回集合的第一个对象

  •  3
  • Dave The Ninja  · 技术社区  · 16 年前

    如果可能的话,我想用一个数据库查询来完成下面的工作。

    public class Location
    {
        public string URL {get;set;}
        public IList<Page> Pages {get;set;}
    }
    
    Page firstPage = Session.Linq<Location>()
                    .Where(location => location.URL == "some-location-url")
                    .Select(location => location.Pages).FirstOrDefault();
    

    我的目标是基于当前位置的URL,从其页面集合返回第一个页面对象。

    我现在尝试了许多不同的方法,它们似乎都执行了许多查询来获取所需的页面对象。

    感谢您的帮助!

    忍者戴夫

    3 回复  |  直到 16 年前
        1
  •  0
  •   Chris Canal    16 年前

    这可能是你想要的:

    Page firstPage = Session.Linq<Page>()
    .OrderBy(page => page.Index)
    .FirstOrDefault(page=> page.Location.URL == "some-location-url");
    

    我假设页面有一个location属性,该属性与它所属的位置和.index相关,它将是您想要订购的属性。

        2
  •  0
  •   teedyay    16 年前

    对运行查询 Page 而不是反对 Location :您不需要返回 位置 记录在案。

    (from p in AllPages
    where p.Location.URL == "some-location-url"
    select p).FirstOrDefault();
    

    [几乎总是在编写LINQ查询时,我发现从涉及的父子关系中最底层的对象开始构建查询会有所帮助。]

        3
  •  0
  •   pythonandchips    16 年前

    无法直接将order by添加到集合的映射中。你可以那么做

    Page firstPage = Session.Linq<Location>()
                  .Where(location => location.URL == "some-location-url")
                  .Select(location => location.Pages.FirstOrDefault()).FirstOrDefault();
    

    第一个或默认值可能会阻止NHibernate进行所有选择。

    不保证,因为我还没有Linq-to-NHibernate测试。