//(1) List<UserInfo> list = ... var query = from x in list group x by x.城市 into g select new { 城市 = g.Key, 人口 = g.Count() }; //(2) var maxcity = query.OrderBy(x => x.人口).OrderByDescending().First().城市;
可以考虑用SQL语句先查出,,在给赋值给List<UserInfo>
1、select 城市,count(用户姓名) as 城市人数from UserInfo group by 城市 2、select 城市,max(count(用户姓名)) as 城市人数 from (select 城市,count(用户姓名) as 城市人数from UserInfo group by 城市) v
public class UserInfo { private string city; private string name; private string gender; public UserInfo(string city, string name, string gender) { this.city = city; this.name = name; this.gender = gender; } public string City { get { return city; } set { city = value; } } public string Name { get { return name; } set { name = value; } } public string Gender { get { return gender; } set { gender = value; } } public override string ToString() { return this.name; } } static void Main(string[] args) { List<UserInfo> Users = new List<UserInfo>() { new UserInfo("SZ", "UserA", "M"), new UserInfo("SZ", "UserB", "F"), new UserInfo("GZ", "UserC", "F"), new UserInfo("BJ", "UserD", "M") }; //1 var p = from u in Users group u by u.City into g orderby g.Count() select new { City = g.Key, pplCount = g.Count() }; foreach (var item in p) Console.WriteLine(item.City + ": " + item.pplCount); Console.WriteLine(); //2 var c = p.OrderByDescending(x => x.pplCount).First().City; Console.WriteLine(c);
Console.ReadKey(); }
不错。不过你可以再简化下 public class UserInfo { public string City { get; set; } public string Name { get; set; } public string Gender { get; set; } public override string ToString() { return Name; } }
// 如果是程序上做的话,用 Lamdha 比较合适
List<UserInfo> users = GetUserInfo();// 1.
var count = users.Where(user => user.City == "[your city name]").Count();// 2.
var maxCount = users.GroupBy(user => user.City)
.OrderBy(group => group.Count()).Last().Key
建议楼主装个ReSharp,会有提示,直接把你的双层循环变为Lamada。
//(1)
List<UserInfo> list = ...
var query = from x
in list
group x by x.城市 into g
select new { 城市 = g.Key, 人口 = g.Count() };
//(2)
var maxcity = query.OrderBy(x => x.人口).OrderByDescending().First().城市;
1、select 城市,count(用户姓名) as 城市人数from UserInfo group by 城市
2、select 城市,max(count(用户姓名)) as 城市人数 from
(select 城市,count(用户姓名) as 城市人数from UserInfo group by 城市) v
{
private string city;
private string name;
private string gender;
public UserInfo(string city, string name, string gender)
{
this.city = city;
this.name = name;
this.gender = gender;
}
public string City { get { return city; } set { city = value; } }
public string Name { get { return name; } set { name = value; } }
public string Gender { get { return gender; } set { gender = value; } } public override string ToString()
{
return this.name;
}
}
static void Main(string[] args)
{
List<UserInfo> Users = new List<UserInfo>()
{ new UserInfo("SZ", "UserA", "M"),
new UserInfo("SZ", "UserB", "F"),
new UserInfo("GZ", "UserC", "F"),
new UserInfo("BJ", "UserD", "M")
};
//1
var p = from u in Users
group u by u.City into g
orderby g.Count()
select new { City = g.Key, pplCount = g.Count() };
foreach (var item in p)
Console.WriteLine(item.City + ": " + item.pplCount);
Console.WriteLine();
//2
var c = p.OrderByDescending(x => x.pplCount).First().City;
Console.WriteLine(c);
Console.ReadKey();
}
public class UserInfo
{
public string City { get; set; }
public string Name { get; set; }
public string Gender { get; set; } public override string ToString()
{
return Name;
}
}