2016-11-12 8 views
1

私は3つのテーブルをプライマリと外国のコンセプトで接続しています。Linq最大値データセットを選択

モデル - > studentRecord

public class studentRecord 
{ 
    public string studentName{ get; set; } 
    public int year{ get; set; } 
} 

表1 - >学生

studentId studentName 
---------------------- 
1    Sam 
2    Mani 
3    rajah 

表2 - >被験者

subjectid subjectName 
------------------------ 
    1   english 
    2    maths 
    3   physics 

テーブル3 - >登録

registerId studentId subjectid Year 
-------------------------------------------- 
    1   1    1  1 
    2   1    2  1 
    3   1    3  1 
    4   1    1  2 
    5   1    2  2 
    6   1    3  2  

私は学生の2年目の記録を取得したいと思います。
私のLINQコード

var op = (from student in db.student.where(x => x.studentId == 1) 
      join register in db.register 
      on student.studentId equals register.studentId 
      select new studentRecord{studentName = student.studentName, year = register.Year}).ToList<studentRecord>().Max(x => x.Year) 

私はエラーを取得しています。優れたパフォーマンスを持っていますか?事前に感謝

+4

ポストは、同様のエラーメッセージ。正確な原因を見つけるのに役立ちます。 –

+0

maxのように適用することはできません – anand

+0

Maxを呼び出す前に、LINQの結果をListに変換してからMaxを呼び出してください(つまり、(...)ToList()。Max()。) –

答えて

1

Linqpadでクエリをテストし、次のクエリは私のためにうまく動作します。

void Main() 
{ 
    var op = (from student in Students.Where(x => x.StudentId == 1) 
       join register in Registers 
       on student.StudentId equals register.StudentId 
       select new {student = student.StudentName, Year = register.Year}) 
    .Max(x => x.Year); 

    op.Dump(); 
} 

また、プロファイラでは次のSQLが表示されます。

exec sp_executesql N'SELECT MAX([t1].[Year]) AS [value] 
FROM [student] AS [t0] 
INNER JOIN [register] AS [t1] ON [t0].[studentId] = [t1].[studentId] 
WHERE [t0].[studentId] = @p0',N'@p0 int',@p0=1 

とにかくおそらくが望むものである。この:

from student in Students.Where(s => s.StudentId == 1) 
join register in Registers.Where(r => r.Year == Registers.Max(x => x.Year)) 
on student.StudentId equals register.StudentId 
select new studentRecord 
    { 
     studentName = student.StudentName, 
     year = register.Year 
    }) 
.ToList<studentRecord>(); 

Studentsはあなたのコードでdb.studentあるなど

関連する問題