首页 > 解决方案 > 如何在 C# 中使用 lambda 或 LINQ 执行子查询、分组和聚合

问题描述

我正在尝试使用 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; } 
}

标签: c#.netlinqlambda

解决方案


使用我的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
          };

推荐阅读