SNGO1

CSharp · Console

/Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
					
public class Program
{
	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
                        from countGroup in
                            (from brow in UserGroup
                             group brow by new
                                 {
                                     Chrome = brow.Browser.Contains("Chrome"),
                                     Firefox = brow.Browser.Contains("Firefox"),
                                     IE = brow.Browser.Contains("IE")
                                 } into g
                                     select new
                                     {
                                         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 class BrowserInfo
    {
        public int UserID { get; set; }
        public string Browser { get; set; }
    }
;