2011-08-18 31 views
3

計算行數,我有以下型號LINQ到鏈接表

public class Account 
{ 
    public int Id { get; set; } 
    public List<Note> Notes { get; set; } 
} 

我想查詢我的NHibernate的倉庫來算的音符數特定帳戶。

return this.Data.Where(x => x.Id == accountId).Select(x => x.Notes).Count();

但是無論多少紙幣也有,它總是返回1.

我試圖做到這一點能夠以最有效的方式,而無需獲得帳戶對象,然後算筆記數量。

任何人都可以推薦以下SQL的Linq等價物。

SELECT Count(*) FROM NoteToAccount WHERE AccountId=?

哪裏NoteToAccount是坐在帳戶之間和注意表的鏈接表。

回答

4

您將收到一個IEnumerable<List<Note>>,其中包含一個元素,該元素是該帳戶的註釋列表。

可以使用SelectMany代替Select壓扁它分解成一個大的實體,也可以使用:

this.Data.First(x => x.Id == accountId).Notes.Count; 

我,當然,假設accountId是主鍵,所以你只有一個項目回來。您也可以使用Single而不是First,以確保您只返回一個項目。

+0

'返回this.Data.Where(X => x.Id ==帳戶ID).SelectMany(X => x.Notes).Count之間的();'非常完美。謝謝。 – JConstantine

2

你想用

.SelectMany(x => x.Notes)