我有一個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