我有一个history
表学生在SQL Server 2008中相当于LINQ查询
StudentHistoryId, StudentId, Grade, CreatedAt, ModifiedAt, ModifiedBy, Active
我是新来的LINQ。
如何编写LINQ查询以获取所有活动学生的最新修改行以及相同的SQL查询?
我有一个history
表学生在SQL Server 2008中相当于LINQ查询
StudentHistoryId, StudentId, Grade, CreatedAt, ModifiedAt, ModifiedBy, Active
我是新来的LINQ。
如何编写LINQ查询以获取所有活动学生的最新修改行以及相同的SQL查询?
LINQ
var tempresult = (from student in Students
where Active == true).OrderByDesc(ModifiedAt)
List<Student> results = new List<Student>();
foreach(var result in tempResult)
{
if((results.Where(r => r.StudentId == result.StudentId).FirstOrDefault()) == null)
{
results.Add(result);
}
}
SQL
Select [Rows]
From Students S
Where S.Active = 1
And S.ModifiedAt = (Select Max(ModifiedAt)
From Student S1
Where S1.StudentId = S.StudentId)
LINQ的是哈克(我敢肯定有一个更好的办法,但我不记得了),我只是排序 - 对SQL语法充满信心(尽管这应该指向正确的方向,即使它不完全正确),但其中任何一个都应该得到:每个当前活动的学生的最大ModifiedAt。
.FirstOrDefault()[LINQ]或Top 1将只选择具有最新ModifiedAt的单行(只有一个学生)。
我试过了sql查询,但它没有给我我要找的结果。我想要每个学生的单个记录 – Talk2me 2011-05-12 19:00:07
喜欢的东西(假设LINQ-SQL):
using (YourDataContext db = new YourDataContext())
{
var data = from s in db.Students
select new
{
StudentId = s.StudentId,
LastHistory = s.Histories
.OrderByDescending(s => s.ModifiedAt)
.Where(s => s.Active)
.FirstOrDefault()
};
}
这是假设你希望所有的学生,不管他们是否真的有什么历史。如果不想这样,您可以从历史记录表格开始,按学生识别号码进行分组。
要查看SQL,可以将该变量悬停在调试中以查看生成的SQL。我懒得转换LINQ ;-)
您打算使用哪种Linq? LINQ到SQL? Linq-to-Entities(实体框架)?? – 2011-05-12 18:07:09
我正在使用Linq-to-SQL – Talk2me 2011-05-16 19:01:32