3

如果可能,我希望使用单个数据库查询来执行以下操作。

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,从其 pages 集合中返回第一个 Page 对象。

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

任何帮助表示赞赏!

忍者戴夫

4

3 回答 3

0

这可能是您正在寻找的:

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

我假设该页面有一个 Location 属性,该属性与它所属的 Location 相关,而 .Index 将是您要订购的属性。

于 2009-02-12T14:22:31.917 回答
0

运行查询反对Page而不是反对Location:您根本不需要返回Location记录。

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

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

于 2009-02-12T14:23:19.933 回答
0

您不能直接将订单添加到集合的映射中吗?然后你可以做

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

FirstOrDefault 可能会阻止 NHibernate 进行所有选择。

对此没有保证,因为我没有设置 linq to nhibernate 来测试它。

于 2009-02-12T15:17:46.480 回答