【问题标题】:How to perform subquery,group by and aggregate together using lambda or LINQ in C#如何在 C# 中使用 lambda 或 LINQ 执行子查询、分组和聚合
【发布时间】:2021-01-25 16:50:07
【问题描述】:

我正在尝试使用 lambda 表达式在子查询中使用聚合函数执行 groupby。我已设法使用 SQL 编写查询,但未能使用 Lambda 表达式执行相同的操作。我们如何使用 Lambda 或 LINQ 编写相同的查询

select 
  [user_ID], FirstName, LastName, Phone, Fax, EmailAddress 
from table1  
where [user_id] in 
    (select [user_id] 
     from table2 group by [USER_ID]  
     having (sum(case when isregistered is not null then 1 else 0 end)) = 0
    )

下面是模型表示

public class AccountDetails
{
    public string Username { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Phone { get; set; }
    public string Fax { get; set; }
    public string EmailAddress { get; set; }
    public bool? IsRegistered { get; set; }
    public string User_Id { get; set; } 
}

【问题讨论】:

  • 完全相同还是结果相同? ;)
  • 也许我的SQL to LINQ Recipe 可以帮助你。
  • 顺便说一句,告诉你正在使用什么 LINQ 真的很有帮助:LINQ to SQL / EF 6.x / EF Core 2.0 / 2.1 / 3.x / 5.x 以及什么数据库提供程序。
  • table1table2 实际上是同一张表吗?如果不是,这两个表的模型在哪里?

标签: c# .net linq lambda


【解决方案1】:

使用我的SQL to LINQ Recipe,这是我对您的 SQL 查询的翻译:

var subq = from a in table2
           group a by a.User_Id into ag
           where ag.Sum(a => a.IsRegistered != null ? 1 : 0) == 0
           select ag.Key;

var ans = from a in table1
          where subq.Contains(a.User_Id)
          select new {
              a.User_Id,
              a.FirstName,
              a.LastName,
              a.Phone,
              a.Fax,
              a.EmailAddress
          };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2011-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多