求一个操作集合的表达式Lambda

wddjzzxsdz 2011-11-15 12:51:35
一个集合里面有同一类对象若干。
找出一个属性出现次数最多的对象。
比如 里面放的5个user,
u1:age=18,name='123';
u2:age=18,name='234';
u3:age=19,name='222';
u4:age=20,name='224';
u5:age=21,name='222';
找出age属性的值出现最多的对象
就是他俩
u1:age=18,name='123';
u2:age=18,name='234';
考虑可能出现两组的情况
u1:age=18,name='123';
u2:age=18,name='234';
u3:age=19,name='222';
u4:age=20,name='224';
u5:age=20,name='222';

...全文
150 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wddjzzxsdz 2011-11-15
  • 打赏
  • 举报
回复
好啊 好啊。
果然是高手如云。
路人乙e 2011-11-15
  • 打赏
  • 举报
回复

//得到分组后的结果
var glist = (from item in list
group item by item.Age into g
orderby g.Count() descending
select g);
//得到出现次数最多的age集合
var ages = glist.Where(g => g.Count() == glist.First().Count()).Select(g => g.Key);
//查询age在age集合中的对象
var result = list.Where(p => ages.Contains(p.Age));
笨熊熊 2011-11-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 q107770540 的回复:]

C# code
var result=(from l in list
group l by l.age into g
orderby g.Count() descending
from t in g
select new user{
age=t.age,
……
[/Quote]

這個好簡練。
阿非 2011-11-15
  • 打赏
  • 举报
回复

List<User> userList = new List<User>() {
new User{Age=18,Name="123"},
new User{Age=18,Name="312"},
new User{Age=19,Name="23"},
new User{Age=20,Name="234"},
new User{Age=21,Name="345"},
new User{Age=22,Name="456"},
new User{Age=22,Name="345"},
new User{Age=23,Name="64"}
};

var result = from u in userList
group u by u.Age into g
let count = g.Count()
select new
{
g.Key,
count
};
var ttt = from t in result
where t.count == result.Max(a => a.count)
select new User { Age = t.Key, Name = userList.First(u => u.Age == t.Key).Name };
foreach (var u in ttt)
{
Console.WriteLine("Name:{1},Age:{0}", u.Age, u.Name);
}
机器人 2011-11-15
  • 打赏
  • 举报
回复
按照 age 分组,且count最多的数据。

 var users = new List<User>
{
new User { age=18, name="1" },
new User { age=18, name="2" },
new User { age=19, name="3" },
new User { age=20, name="4" },
new User { age=19, name="5" },
new User { age=21, name="6" },
};
var groupByAge = from u in users
group u by u.age into g
select new { key = g.Key, count = g.Count(), items = g };
var result = from u in users
let maxCntAge = groupByAge.Max(g => g.count)
let ages = groupByAge.Where(g => g.count == maxCntAge).Select(g => g.key)
where ages.Contains(u.age)
select u;
foreach (var u in result)
Console.WriteLine("{0}:{1}", u.name, u.age);


q107770540 2011-11-15
  • 打赏
  • 举报
回复
var result=(from l in list
group l by l.age into g
orderby g.Count() descending
from t in g
select new user{
age=t.age,
name=t.name
}).FirstOrDefault();
wang1986614 2011-11-15
  • 打赏
  • 举报
回复


友情帮顶!

62,041

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧