【问题标题】:LINQ to count number of rows in link tableLINQ 计算链接表中的行数
【发布时间】:2011-08-18 16:06:10
【问题描述】:

我有以下型号

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

我正在尝试查询我的 nhibernate 存储库以计算特定帐户的笔记数。

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

不管有多少个音符,它总是返回 1。

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

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

SELECT Count(*) FROM NoteToAccount WHERE AccountId=?

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

【问题讨论】:

    标签: c# sql linq nhibernate


    【解决方案1】:

    您将返回一个IEnumerable&lt;List&lt;Note&gt;&gt;,其中有一个元素是帐户的备注列表。

    您可以使用SelectMany 而不是Select 将其扁平化为一个大实体,或者您可以使用:

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

    当然,我假设 accountId 是主键,所以您只会得到一个项目。您也可以使用Single 而不是First 来确保您能准确地取回一件物品。

    【讨论】:

    • return this.Data.Where(x =&gt; x.Id == accountId).SelectMany(x =&gt; x.Notes).Count(); 完美运行。谢谢。
    【解决方案2】:

    你想用

    .SelectMany(x => x.Notes)
    

    【讨论】:

      猜你喜欢
      • 2015-03-05
      • 2015-05-21
      • 2014-04-12
      • 1970-01-01
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多