2012-09-01 14 views
2

我有一個LINQ到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>對象,特別是因爲查詢永遠不會返回多個用戶配置文件。可以這樣做,還是我堅持了額外的步驟?

回答

1

如果映射例如:是否已對UserMessageUserProfile財產導航的另一邊,你可以從UserMessage開始:

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

否則,你需要使用SelectMany()得到一個平坦的出名單。

+0

一個簡單的答案;謝謝! –

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); 
相關問題