Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Linq从数据库中获取项目的最小值和最大值_C#_Linq - Fatal编程技术网

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();