ASP.NET MVC3 Linq to SQL的Group by问题请教!

lightmusic 2014-01-14 09:03:52
select StuID as 学号, (select TrueName from DB_Users where DB_Score.StuID=DB_Users.StuID) as 姓名 ,
sum(case ClassID WHEN '25' THEN Score END )AS 语文,
sum(case ClassID WHEN '26' THEN Score END )AS 数学,
sum(Score) as 总分,AVG(Score) as 平均分,
Rank() over ( order by sum(Score) ) as 名次
from DB_Score Where TypeID=1 and ImportTime='2014-1-14'
group by DB_Score.StuID order by 总分



上面这句是SQL的写法,其中查询条件TypeID=变量,ImportTime=变量
这句在SQL查询中一点问题没有
现在的问题是如何把这个语句转换成LINQ的,或者其他方法能拿到想要的数据就行
要可以自己填写条件来查询,如何获得这两个变量
普通的我都会写,但是group by的实在不会了,求大神帮忙!
...全文
197 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lightmusic 2014-01-14
  • 打赏
  • 举报
回复
请问 tptptp00 那两个条件写哪? 要根据考试类型和考试时间查询的 也就是TypeID=变量,ImportTime=变量
tptptp00 2014-01-14
  • 打赏
  • 举报
回复

var q = from a in DB_Score 
	group a by a.StuID into k
	select new {
		stuNum = k.Key,
		lang = k.Where(b=>b.ClassID==1).Sum(b=>b.Score),
		math = k.Where(b=>b.ClassID==2).Sum(b=>b.Score),
	};
	var p = q.Select(a=>new {
		stuNum = a.stuNum,
		lang = a.lang,
		math = a.math,
		total = (a.lang+a.math)
	});
        foreach(var item in p.OrderByDescending(a=>a.total)){}
lightmusic 2014-01-14
  • 打赏
  • 举报
回复

public ActionResult AvgScore(int? TypeID, DateTime? AddTime, int? GradeID, int? ClassID)
        {
            string tempStr="";
            var q = from a in context.DB_Score
                    join o in context.DB_Users on a.StuID equals o.StuID
                    where (a.TypeID == TypeID || string.IsNullOrEmpty(Convert.ToString(TypeID)))
                    && (SqlMethods.DateDiffDay(a.AddTime, Convert.ToDateTime(AddTime)) == 0 || string.IsNullOrEmpty(Convert.ToString(AddTime)))
                    && (o.GradeID == GradeID || string.IsNullOrEmpty(Convert.ToString(GradeID)))
                    && (o.ClassID == ClassID || string.IsNullOrEmpty(Convert.ToString(ClassID)))
                    group a by a.StuID into k
                    select new
                    {
                        学号 = k.Key,
                        语文 = k.Where(b => b.ClassID == 25).Sum(b => b.Score),
                        数学 = k.Where(b => b.ClassID == 26).Sum(b => b.Score),
                        英语 = k.Where(b => b.ClassID == 35).Sum(b => b.Score),
                        政治 = k.Where(b => b.ClassID == 36).Sum(b => b.Score),
                        历史 = k.Where(b => b.ClassID == 37).Sum(b => b.Score),
                        生物 = k.Where(b => b.ClassID == 38).Sum(b => b.Score),
                        地理 = k.Where(b => b.ClassID == 39).Sum(b => b.Score),
                        物理 = k.Where(b => b.ClassID == 40).Sum(b => b.Score),
                        化学 = k.Where(b => b.ClassID == 41).Sum(b => b.Score),
                        综合文 = k.Where(b => b.ClassID == 55).Sum(b => b.Score),
                        综合理 = k.Where(b => b.ClassID == 56).Sum(b => b.Score),
                        平均分 = k.Average(b => b.Score),
                        总分 = k.Sum(b => b.Score)
                    };
            var p = q.Select(a => new
            {
                学号 = a.学号,
                语文 = a.语文,
                数学 = a.数学,
                英语 = a.英语,
                政治 = a.政治,
                历史 = a.历史,
                生物 = a.生物,
                地理 = a.地理,
                物理 = a.物理,
                化学 = a.化学,
                综合文 = a.综合文,
                综合理 = a.综合理,
                平均分 = a.平均分,
                总分 = a.总分
            });
            JsonClass jsonData = new JsonClass();
            jsonData.Name("myList");
            JsonClass jsonResult = new JsonClass();
            jsonResult.Name("isNull");
            int i = 1;
            foreach (var item in p.OrderByDescending(a => a.总分))
            {
                jsonData.Add("mingci", i);
                jsonData.Add("xuehao", item.学号);
                jsonData.Add("xingming", Function.GetUserTrueName(item.学号));
                jsonData.Add("yuwen", CheckHasVal(item.语文));
                jsonData.Add("shuxue", CheckHasVal(item.数学));
                jsonData.Add("yingyu", CheckHasVal(item.英语));
                jsonData.Add("zhengzhi",CheckHasVal(item.政治));
                jsonData.Add("lishi", CheckHasVal(item.历史));
                jsonData.Add("shengwu", CheckHasVal(item.生物));
                jsonData.Add("dili", CheckHasVal(item.地理));
                jsonData.Add("wuli", CheckHasVal(item.物理));
                jsonData.Add("huaxue", CheckHasVal(item.化学));
                jsonData.Add("zonghewen",CheckHasVal(item.综合文));
                jsonData.Add("zongheli", CheckHasVal(item.综合理));
                jsonData.Add("pingjunfen", item.平均分);
                jsonData.Add("zongfen", item.总分);
                jsonData.BuildSection();
                i++;
            }
            tempStr += jsonData.BuildJson(2, false);
            jsonResult.Add(false);
            tempStr += jsonResult.BuildJson(1, true);
            ViewData["Result"] = "{" + tempStr + "}";
            return View("Result");
        }
最终完成了,谢谢大神提供的思路!
tptptp00 2014-01-14
  • 打赏
  • 举报
回复
var q = from a in DB_Score group a by a.StuID into k where a.type==1 select new { stuNum = k.Key, lang = k.Where(b=>b.ClassID==1).Sum(b=>b.Score), math = k.Where(b=>b.ClassID==2).Sum(b=>b.Score), };

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧