【问题标题】:LINQ Equivalent of "select *, count()"“select *, count()”的 LINQ 等效项
【发布时间】:2022-01-01 05:24:41
【问题描述】:

我在 SQL Server 上有两个表 A , B 如下所示:

A 的列:id1, id2, col_1, ... , col_100

B 的列:id1、id2、...(某些列)

我想在 C# Linq 中编写相当于下面的 SQL 查询:

select *, (select count(*) from B where A.id1 = B.id1 and A.id2 = b.id2)  from  A

我知道可以这样做:

var lst = db.TableA.Select(a => new {
    id1 = a.id1,
    id2 = a.id2,
    col_1 = a.col_1,
    ...
    ,
    col_100 = a.col_100,
    count = db.TableB.Where(b => b.id1 = a.id1 && b.id2 == a.id2).Count()
});

但是在这种格式中,我必须提到表 A 的所有列,而我只想在表 A 的现有列中添加一个新列,如下所示:select *, count()

你能帮帮我吗?

【问题讨论】:

  • 这行得通吗? .Select(a => new { a, count = db.TableB.Count(b => b.id1 == a.id1 && b.id2 == a.id2) })
  • db.TableA.Select(a => new { A = a, Count = db.TableB.Where(...).Count()})
  • @RichardDeeming 不,它有一个编译错误。
  • @class1234 错误信息是?
  • @class1234 如果您希望有人帮助您修复错误,那么您需要告诉我们错误是什么。指向您未提供任何错误详细信息的评论的链接没有帮助。

标签: c# sql sql-server linq linq-to-sql


【解决方案1】:

这个怎么样:

var result = dbContext.TableA.Select(a => new
{
    A = a,
    Count = dbContext.TableB.Where(b => b.id1 = a.id1 && b.id2 == a.id2)
                            .Count(),
});

所以你从属性A中的tableA中选择完整的行,并将tableB中对应项目的数量放在属性Count中

【讨论】:

  • 没有。正如我所说,我希望结果仅由列(A.id1、A.id2、A.col_1、...、A.col_100、Count)填充。但在您的解决方案中,结果填充了“属性 A”和“计数列”。
  • 是的,我知道,这对您来说真的有很大的不同吗?
猜你喜欢
  • 1970-01-01
  • 2013-09-27
  • 1970-01-01
  • 2014-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 2016-01-06
相关资源
最近更新 更多