LINQ:计算多列中的真正布尔值

时间:2010-03-11 13:19:26

标签: sql linq linq-to-sql count

我正在使用LINQ to SQL加速项目的交付,这真的有助于它。但是,我正在努力处理一些我习惯使用手动SQL的事情。

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

我想写一个LINQ查询来给我一个每列的真实数,所以电子邮件列中有多少行设置为true(对于其他两行,相同)列)

3 个答案:

答案 0 :(得分:2)

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

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类型,包含汇总信息。这也可用于更强制的聚合。

答案 1 :(得分:1)

var mobileCount = myTable.Count(user => user.MobileAvailable);

等等其他计数。

答案 2 :(得分:1)

你可以这样做:

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