using System.Collections.Generic;
public static void Main()
List<BrowserInfo> browesers = new List<BrowserInfo>
new BrowserInfo { UserID = 1, Browser = "Chrome-32.0"},
new BrowserInfo { UserID = 1, Browser = "Chrome-30.0"},
new BrowserInfo { UserID = 1, Browser = "Chrome-33.0"},
new BrowserInfo { UserID = 1, Browser = "Firefox-20.0"},
new BrowserInfo { UserID = 1, Browser = "Firefox-26.0"},
new BrowserInfo { UserID = 1, Browser = "Safari"},
new BrowserInfo { UserID = 1, Browser = "IE 9"},
new BrowserInfo { UserID = 1, Browser = "IE 10"},
new BrowserInfo { UserID = 2, Browser = "Chrome-31.0"},
new BrowserInfo { UserID = 2, Browser = "Chrome-32.0"},
new BrowserInfo { UserID = 2, Browser = "IE 10"},
new BrowserInfo { UserID = 2, Browser = "Firefox-22.0"},
new BrowserInfo { UserID = 2, Browser = "Firefox-20.0"}
var query = from browser in browesers
group browser by browser.UserID into UserGroup
Chrome = brow.Browser.Contains("Chrome"),
Firefox = brow.Browser.Contains("Firefox"),
IE = brow.Browser.Contains("IE")
ChromeCount = g.Key.Chrome ? g.Count() : 0,
FirefoxCount = g.Key.Firefox ? g.Count() : 0,
IECount = g.Key.IE ? g.Count() : 0,
OthersCount = (!g.Key.Chrome && !g.Key.Firefox && !g.Key.IE) ? g.Count() : 0
group countGroup by UserGroup.Key;
Console.WriteLine("UserId | Chrome | Firefox | IE | Others");
Console.WriteLine("----------------------------------------");
foreach(var users in query)
Console.WriteLine("{0} | {1} | {2} | {3} | {4} ",
users.Key, users.Where(x => x.ChromeCount != 0).Select(x => x.ChromeCount).FirstOrDefault(),
users.Where(x => x.FirefoxCount != 0).Select(x => x.FirefoxCount).FirstOrDefault(),
users.Where(x => x.IECount != 0).Select(x => x.IECount).FirstOrDefault(),
users.Where(x => x.OthersCount != 0).Select(x => x.OthersCount).FirstOrDefault()
public int UserID { get; set; }
public string Browser { get; set; }