我试图找出如何在T-SQL中作为一个组和聚合过程来做我所知道的。
我有一个List,在该列表中我有每个实例的2条记录。我需要值较低的记录。
所以在申请中我有学生记录。所以我的清单会是这样的:
0 studentid 1 score 75.345
1 studentid 1 score 33.653
2 studentid 2 score 94.876
3 studentid 2 score 15.234
etc....
我在List结果中有这些记录:
var result = abc.Find<Student>...snip
要明确业务规则要求在两者之间找到较低的分数。
那么我如何在Linq中完成这个过滤和选择呢?我看到有Group和聚合Linq扩展,但老实说不确定这是否是追求的途径。
谢谢
答案 0 :(得分:3)
使用GroupBy
和Min
功能。
var result = context.GroupBy(s=> s.StudentId)
.Select(sg => new {
StudentId = sg.Key,
MinScore = sg.Min(sc=> sc.Score)
});
答案 1 :(得分:0)
也许这会有所帮助:
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
public static void Main()
{
var s1=new Student(){Id=0, Name="Student 1", Score=56.44};
var s2=new Student(){Id=1, Name="Student 1", Score=34.45};
var s3=new Student(){Id=2, Name="Student 2", Score=56.23};
var s4=new Student(){Id=3, Name="Student 2", Score=98.54};
var list=new List<Student>(){s1,s2,s3,s4};
var select=list.OrderBy(x=>x.Score).GroupBy(x=>x.Name);
var newList=new List<Student>();
foreach (var item in select){
newList.Add(item.First());
}
foreach (var item in newList){
Console.WriteLine(item.Id +"/"+item.Name +"/"+item.Score);
}
}
public class Student
{
public int Id {get;set;}
public string Name {get;set;}
public double Score {get;set;}
}
}
首先,您需要order by
分数,然后group-by
名称,然后从每个组中取first
。