C# 使用Linq从数据库中获取项目的最小值和最大值
在数据库中,我有:C# 使用Linq从数据库中获取项目的最小值和最大值,c#,linq,C#,Linq,在数据库中,我有: Name Value First Player 300 First Player 500 First Player 250 SecondPlayer 200 Second Player 450 我需要向每个玩家显示最大值和最小值: Name MaxValue MinValue FirstPlayer 500 250 SecondPlayer 450
Name Value
First Player 300
First Player 500
First Player 250
SecondPlayer 200
Second Player 450
我需要向每个玩家显示最大值和最小值:
Name MaxValue MinValue
FirstPlayer 500 250
SecondPlayer 450 200
我这样做:
var res = (from item in _context.Players
select item).Max(s=>s.Value);
但它只有一个玩家拥有最大价值 GroupBy和Select应该可以工作:
var res = _context.Players.GroupBy(x=> x.Name)
.Select(x=> new
{
Name = x.Key,
Max = x.Max(y=> y.Value),
Min = x.Min(y=> y.Value)
}).ToList();
或者使用查询语法:
var res = (from p in _context.Players
group p by p.Value into grp
select new
{
Name = grp.Key,
Max = grp.Max(rec => rec.Value),
Min = grp.Min(rec => rec.Value)
}).ToList();
查询语法:
var result = (from item in _context.Players
group item by name into @group
select new
{
Name = @group.Key,
MaxValue = @group.Max(i=>i.Value),
MinValue = @group.Min(i=>i.Value)
}).ToList();
或者在一个很好的linq方法语法中:(这个重载基本上允许您在.GroupBy()中执行.Select()
)
你需要按玩家名称分组。当开发人员强迫自己使用关键字作为变量名,可以命名任何东西!然后使用@来解决他们自己造成的问题时,我发现这真的很烦人。设计语言语法的人为完全不同的情况创建了@。@user318569-我同意,但我也会避开我们ing@group/grp/g并给出一个更好的名称-此用法用于解释原因不能在LINQ to Entities查询中构造实体或复杂类型“Context.Player”。我添加了select new Player,因为在我看来我有模型播放器。@kirillnesterov-如果你不能通过googl解决它,你应该为此发布一个新问题无法在LINQ to Entities查询中构造实体或复杂类型“Context.Player”。我添加了“选择新播放器”,因为在我看来,我有模型播放器。
var result = _context.Players.GroupBy(item => item.Name, (key, @group) => new
{
Name = key,
MaxValue = @group.Max(i => i.Value),
MinValue = @group.Min(i => i.Value)
}).ToList();