2010-03-11 46 views
3

我正在使用LINQ to SQL來加快項目的交付速度,它真的幫助了。然而,我正在努力處理一些我習慣用手動SQL做的事情。LINQ:計算多列中真布爾值的數量

我有一個LINQ集合包含三列,每列包含表示電子郵件,手機或地址是否可用的布爾值

我想寫LINQ查詢給我trues的計數每列,所以在電子郵件列有多少行被設置爲true(與同爲另兩列)

回答

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; 
} 
); 

xResult的類型,包含彙總信息。這也可以用於更多的compelx聚合。

+0

兩點 - 1)我不相信你可以修改聚合函數的第一個參數,它是隻讀的。 2)你的'0'和'1'顛倒了,你在false上加1,在true上加0。除此之外,一個非常好的想法,但不得不對每個元素做一個「新」,對我來說似乎「不理想」。 – Hogan 2012-07-19 20:46:56

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

等等等等。

1

你能做到像這樣:

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