使用linq对包含子字符串的表进行分组

我的数据表(DeviceInfo):

 ID |  OS | 设备
 -----------------------------------------------
 1 |  Android 2.2 | 三星
 2 |  Linux / Android 4.2 |  LG
 3 |  Linux / Android 4.4.2 |  HTC
 4 |  Android 3.2 | 三星
 5 |  Android 3.0 | 摩托罗拉
 6 |  iOS 7.1.2 |  iPad的
 7 |  iOS 8.0 |  iPhone 6
 8 |  iOS 6.1.6 |  iPhone 4

我想用Android和ios用户使用Linq对这个表进行分组。实际上我必须使用子串“Android”和“iOS”对表进行分组。
我的输出应该是

 ID | 用户| 计数 
 ----------------------------
 1 |  Android | 五
 2 |  iOS |  3

如何使用linq获取此表?

你可以尝试这样的事情:

 // db is my datacontext var groupByOS = (from c in (from d in db.DeviceInfo where d.Os.ToUpper().Contains("ANDROID") || d.Os.ToUpper().Contains("IOS") group d by new { d.Os } into dev select new { User = dev.Key.Os.ToUpper().Contains("ANDROID") ? "Android" : "iOS", DeviceCount = dev.Count() }) group c by new { c.User } into newgrp select new { newgrp.Key.User, Count = newgrp.Sum(q => q.DeviceCount) }).ToList(); 

试试这个:(我用过Console App,你可以根据你的需求改变它。): –

  var query = from device in deviceInfo where device.OS.Contains("Android") || device.OS.Contains("iOS") group device by new { Android = device.OS.Contains("Android"), iOS = device.OS.Contains("iOS") } into deviceGroup select new { AndroidCount = deviceGroup.Key.Android ? deviceGroup.Count() : 0, iOSCount = deviceGroup.Key.iOS ? deviceGroup.Count() : 0 }; Console.WriteLine("User | Count"); Console.WriteLine("--------------"); foreach (var dev in query) { if (dev.AndroidCount != 0) Console.WriteLine("{0} | {1}", "Android", dev.AndroidCount); if(dev.iOSCount!=0) Console.WriteLine("{0} | {1}", "iOS", dev.iOSCount); }