LINQ:计算多列中真实布尔值的数量

Pet*_*ger 4 sql linq count linq-to-sql

我正在使用 LINQ to SQL 来加快项目的交付速度,这确实很有帮助。然而,我在习惯使用手动 SQL 做的一些事情上遇到了困难。

我有一个包含三列的 LINQ 集合,每列都包含一个布尔值,表示电子邮件、手机或地址是否可用。

我想编写一个 LINQ 查询来计算每列的 true 计数,以便将电子邮件列中的多少行设置为 true(其他两列也相同)

Axe*_*ger 5

如果您需要包含结果的单个对象:

var result = new {
    HasEmailCount = list.Count(x => x.HasEmail),
    HasMobileCount = list.Count(x => x.HasMobile),
    HasAddressCount = list.Count(x => x.HasAddress)
};
Run Code Online (Sandbox Code Playgroud)

或者使用聚合函数:

class Result
{
 public int HasEmail;
 public int HasAddress;
 public int HasMobile;
}

var x = data.Aggregate(
 new Result(),
 (res, next) => {
  res.HasEmail += (next.HasEmail ? 0 : 1);
  res.HasAddress += (next.HasAddress ? 0 : 1);
  res.HasMobile += (next.HasMobile ? 0 : 1);
  return res;
 }
);
Run Code Online (Sandbox Code Playgroud)

x属于 TypeResult并包含聚合信息。这也可以用于更复杂的聚合。