Sql 如果不存在,请选择一些数据
我编写了一个从tbl中选择最高记录的查询。我想检查tbl中是否没有记录我的查询返回假数据,如(StudentId=1,HighScore=0)Sql 如果不存在,请选择一些数据,sql,sql-server,linq,sql-server-2008,linq-to-sql,Sql,Sql Server,Linq,Sql Server 2008,Linq To Sql,我编写了一个从tbl中选择最高记录的查询。我想检查tbl中是否没有记录我的查询返回假数据,如(StudentId=1,HighScore=0) 试试这个: var queryWin = (from T in ((from tbl_ActPoints in dc.tbl_ActPoints select new { tbl_ActPoints.StudentId,
试试这个:
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 };
稍微清理一下代码:
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};
技巧,以及coolswastik代码不起作用的原因,因为两个匿名对象,即使具有相同的属性,也总是不同的,所以您需要一个命名类:
class StudentHighScore
{
public int StudentId { get; set; }
public int HighScore { get; set; }
}
编辑了答案
class StudentHighScore
{
public int StudentId { get; set; }
public int HighScore { get; set; }
}