我正在使用LINQ to SQL來加快項目的交付速度,它真的幫助了。然而,我正在努力處理一些我習慣用手動SQL做的事情。LINQ:計算多列中真布爾值的數量
我有一個LINQ集合包含三列,每列包含表示電子郵件,手機或地址是否可用的布爾值。
我想寫LINQ查詢給我trues的計數每列,所以在電子郵件列有多少行被設置爲true(與同爲另兩列)
我正在使用LINQ to SQL來加快項目的交付速度,它真的幫助了。然而,我正在努力處理一些我習慣用手動SQL做的事情。LINQ:計算多列中真布爾值的數量
我有一個LINQ集合包含三列,每列包含表示電子郵件,手機或地址是否可用的布爾值。
我想寫LINQ查詢給我trues的計數每列,所以在電子郵件列有多少行被設置爲true(與同爲另兩列)
如果您需要一個包含結果的單個對象:
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聚合。
var mobileCount = myTable.Count(user => user.MobileAvailable);
等等等等。
你能做到像這樣:
var emailCount = yourDataContext.YourTable.Count(r => r.HasEmail);
等
兩點 - 1)我不相信你可以修改聚合函數的第一個參數,它是隻讀的。 2)你的'0'和'1'顛倒了,你在false上加1,在true上加0。除此之外,一個非常好的想法,但不得不對每個元素做一個「新」,對我來說似乎「不理想」。 – Hogan 2012-07-19 20:46:56