WENN NICHT EXISTIERT WERDEN, wählen Sie einige data aus

Ich schrieb eine Abfrage, die den höchsten datasatz von tbl auswählt. Ich möchte überprüfen, ob es keinen datasatz in tbl meine Abfrage zurückgehaltenen gefälschten data wie (StudentId = 1, HighScore = 0)

var queryWin = (from T in ((from tbl_ActPoints in dc.tbl_ActPoints select new { tbl_ActPoints.StudentId, tbl_ActPoints.Score })) group T by new { T.StudentId } into g orderby ((System.Int32?)g.Sum(p => p.Score) ?? (System.Int32?)0) descending select new { g.Key.StudentId, HighScore = ((System.Int32?)g.Sum(p => p.Score) ?? (System.Int32?)0) }).Take(1); 

Versuche dies:

 var queryWin = (from T in ((from tbl_ActPoints in dc.tbl_ActPoints select new { tbl_ActPoints.StudentId, tbl_ActPoints.Score })) group T by new { T.StudentId } into g orderby ((System.Int32?)g.Sum(p => p.Score) ?? (System.Int32?)0) descending select new { g.Key.StudentId, HighScore = ((System.Int32?)g.Sum(p => p.Score) ?? (System.Int32?)0) }).Take(1); var result = queryWin.FirstOrDefault(); if (result == null) result = new { StudentId = 1, HighScore=0 }; 

Aufräumen Sie Ihren Code ein wenig:

 var queryWin = (from tbl_ActPoints in dc.tbl_ActPoints group new { tbl_ActPoints.StudentId, tbl_ActPoints.Score } by tbl_ActPoints.StudentId into g orderby (g.Sum(p => p.Score) ?? 0) descending select new StudentHighScore { g.Key.StudentId, HighScore = (g.Sum(p => p.Score) ?? 0) }).FirstOrDefault() ?? new StudentHighScore { StudentID = 1, HighScore = 0}; 

Der Trick, und der Grund coolswastiks Code funktionierte nicht, da zwei anonyme objecte, auch mit den gleichen properties, immer anders sind, also brauchst du eine benannte class:

 class StudentHighScore { public int StudentId { get; set; } public int HighScore { get; set; } }