【问题标题】:Convert Count ... Group By From SQL Query To LINQ将 Count ... Group By 从 SQL 查询转换为 LINQ
【发布时间】:2013-05-20 17:50:22
【问题描述】:

请帮我将下面的 MSSQL 转换为 LINQ。

SELECT A.id, A.type, COUNT(IIf(B.BookId IS NOT NULL, 0, null)) AS TotalCount
FROM Store A
LEFT JOIN Book B ON A.id = B.id
GROUP BY A.id, A.type;

我目前有这个 LINQ 代码:

from a in Store
join b in Book on a.id equals b.id into c
from d in c.DefaultIfEmpty()
group a by new
{
    a.id,
    a.type
} into g 
select new
{
    StoreId = g.Key.id,
    StoreType = g.Key.type,
    TotalCount = g.Key !=null?g.Count():0
}

我想我错过了一些重要的东西。

【问题讨论】:

  • 请更详细地描述您的 LINQ 查询的问题。您的查询是否编译?如果它编译它执行时会发生什么?如果不是,错误是什么?
  • 嗨,欢迎来到 StackOverflow。要充分利用 StackOverflow,请在提出问题后立即密切关注您的问题。大多数问题在最初的几分钟内获得了最多的浏览量。因此,如果有人要求澄清尽快通过编辑您的帖子来提供,否则人们将失去兴趣并继续前进。
  • 您好,很抱歉回复晚了。我的 LINQ 查询没有任何问题,但这不是我的预期结果。但是,D Stanley 已经指出了这个问题。谢谢大家...

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


【解决方案1】:

由于您没有尝试从连接的 Book 部分提取任何值,因此您不需要 DefaultIfEmpty(),并且由于 into 子句,连接是“组连接”您无需再次分组:

from a in Store
join b in Book on a.id equals b.id into c
select new
{
    StoreId = a.id,
    StoreType = a.type,
    TotalCount = C.Count()
}

【讨论】:

  • 谢谢你的回答,你救了我一天。如果我想添加这样的 WHERE CLAUSE - WHERE (B.RackId = 4 OR B.RackId IS null) 那么如何在 LINQ 上执行此操作。我是 LINQ 的新手,这就是为什么我不太了解 LINQ 的基础架构和概念。你有什么推荐的文章或教程给我吗??
  • 好的,我找到了答案——SQL查询WHERE (B.RackId = 4 OR B.RackId IS null)LINQ查询TotalCount = c.Count(e => e.RackId == 4 || e.RackId == null)
猜你喜欢
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-25
  • 2010-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多