LINQ计算链接表中的行数

时间:2011-08-18 16:06:10

标签: c# sql linq nhibernate

我有以下型号

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.

我尝试以最有效的方式执行此操作,而无需获取帐户对象,然后计算笔记数。

任何人都可以建议Linq等效于以下SQL。

SELECT Count(*) FROM NoteToAccount WHERE AccountId=?

其中NoteToAccount是位于Account和Note表之间的链接表。

2 个答案:

答案 0 :(得分:4)

您将返回IEnumerable<List<Note>>,其中包含一个元素,即该帐户的备注列表。

您可以使用SelectMany代替Select将其展平为一个大型实体,或者您可以使用:

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

我当然假设accountId是主键,所以你只能得到一个项目。您也可以使用Single代替First,以确保您只获得一件商品。

答案 1 :(得分:2)

您想要使用

.SelectMany(x => x.Notes)