Linq to NHibernate:如何在不嵌套列表的情况下获取子对象列表

时间:2012-09-01 15:09:56

标签: c# linq nhibernate linq-to-nhibernate

我有一个Linq to NHibernate查询,如下所示:

var profile = 
    from UserProfile up in _Session.Query<UserProfile>()
        .Fetch(x=>x.Messages)
    where up.UserName == userName
    select up.Messages;

这将返回IQueryable<IList<UserMessage>>,然后我必须运行SelectMany()。我更喜欢我可以只返回一个IQueryable<UserMessage>对象,特别是因为查询永远不会返回多个用户配置文件。可以这样做,还是我坚持额外的步骤?

2 个答案:

答案 0 :(得分:1)

如果您映射导航的另一侧,例如UserProfile课程上有UserMessage属性,则可以从UserMessage开始:

var messages = 
    from UserMessage um in _Session.Query<UserMessage>()
    where um.UserProfile.UserName == userName
    select um;

否则,您需要使用SelectMany()来获取展开的列表。

答案 1 :(得分:1)

您可以直接查询消息表并使用反向关联吗?

IQueryable<Message> messages = ...;
var filtered = from m in messages
    where m.UserProfile.UserName == userName
    select m;

此外,如果您愿意放弃查询语法,可以使用以下内容缩短查询时间:

var profile = _Session.Query<UserProfile>()
    .Where(up => up.UserName == userName)
    .SelectMany(up => up.Messages);