Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql LINQ:计算多列中的真布尔数_Sql_Linq_Linq To Sql_Count - Fatal编程技术网

Sql LINQ:计算多列中的真布尔数

Sql LINQ:计算多列中的真布尔数,sql,linq,linq-to-sql,count,Sql,Linq,Linq To Sql,Count,我正在使用LINQtoSQL来加速项目的交付,这对我很有帮助。然而,我正在努力解决一些我习惯于使用手动SQL的事情 我有一个LINQ集合,包含三列,每列包含一个布尔值,表示电子邮件、手机或地址是否可用 我想编写一个LINQ查询,为每列提供一个trues计数,那么电子邮件列中有多少行被设置为true(其他两列也是如此) 其他计数也是如此。您可以这样做: var emailCount = yourDataContext.YourTable.Count(r => r.HasEmail); 等等

我正在使用LINQtoSQL来加速项目的交付,这对我很有帮助。然而,我正在努力解决一些我习惯于使用手动SQL的事情

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

我想编写一个LINQ查询,为每列提供一个trues计数,那么电子邮件列中有多少行被设置为true(其他两列也是如此)

其他计数也是如此。

您可以这样做:

var emailCount = yourDataContext.YourTable.Count(r => r.HasEmail);

等等。

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

var result = new {
    HasEmailCount = list.Count(x => x.HasEmail),
    HasMobileCount = list.Count(x => x.HasMobile),
    HasAddressCount = list.Count(x => x.HasAddress)
};
或使用聚合函数:

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;
 }
);
x
类型为
Result
,包含聚合信息。这也可以用于更多compelx聚合。

两点——1)我不相信您可以修改聚合函数的第一个参数,它是只读的。2) 您将
0
1
颠倒,在false上加1,在true上加0。除此之外,这是一个非常好的主意,但是必须对每个元素执行
新操作对我来说似乎“不理想”。如何获得列名(组):Count
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;
 }
);