MVC5 Linq多表联合汇总查询的问题

冉娃娃 2015-12-09 09:02:20
环境:
win10,
studio2015,
sqlserver2012,
mvc5,
ef6

我现在有三个表,表结构如下图所示:


想实现一个每日汇总的功能,如下图:


本身每日汇总表只有时间,送餐员和带出去的这三个数据,其他数据都是通过其他表计算后得到,还有一个没卖完的是通过所有计算后的数据再计算得到的。。

如果在sqlserver里面,一条一条语句跑下来能做。。。
但是现在是用的MVC5,在Controller里面怎么用Linq实现呢??一点头绪都没有。。

另外还有一个问题,在每日汇总表的模型里面,RecordDate的类型是Date,由Entity Framwork自动生成到SQL里面后,对应的字段映射的是DateTime类型,要怎么操作才能在Sqlserver里面映射成Date类型呢?
...全文
322 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
蝶恋花雨 2015-12-11
  • 打赏
  • 举报
回复
引用 3 楼 qq_25768813 的回复:
sql 语句已经弄出来了。就是不不知道在LINQ里面怎么操作。。。 group by dm.Name,dm.id,re.Out) as newtb
新建一个视图把写好的SQL复制到里面保存。然后在EF里面把这个视图拖到上面。然后 from p in db. xx视图就OK了
冉娃娃 2015-12-10
  • 打赏
  • 举报
回复
引用 1 楼 kongwei521 的回复:
你可以创建一个试图 ,试图里面写好各个关联及想要的字段。然后直接 linq 查询即可。 或者 大体这样。
sql 语句已经弄出来了。就是不不知道在LINQ里面怎么操作。。。 select *,'没卖完的'= isnull(newtb.携带的,0)-isnull(newtb.收现金的,0)-isnull(newtb.网上付的,0)-isnull(newtb.月结的,0)-isnull(newtb.欠债的,0) from (select dm.name as '送餐员',re.out as '携带的', '收现金的'=(select sum(totalnumber) from OrderDetails as zi where zi.distributionmemberid=dm.Id and zi.paystateid=1), '网上付的'=(select sum(totalnumber) from OrderDetails as zi where zi.distributionmemberid=dm.Id and zi.paystateid=2), '月结的'=(select sum(totalnumber) from OrderDetails as zi where zi.distributionmemberid=dm.Id and zi.paystateid=3), '欠债的'=(select sum(totalnumber) from OrderDetails as zi where zi.distributionmemberid=dm.Id and zi.paystateid=4) from DistributionMembers as dm --找出所有送餐员 left join records as re on dm.Id=re.DistributionMemberId --找出送餐员的纪录 left join OrderDetails as od on od.distributionmemberid=dm.Id --找出送餐员的订单详情 group by dm.Name,dm.id,re.Out) as newtb
冉娃娃 2015-12-10
  • 打赏
  • 举报
回复
引用 1 楼 kongwei521 的回复:
你可以创建一个试图 ,试图里面写好各个关联及想要的字段。然后直接 linq 查询即可。 或者 from a in db.Records join b in db.orderdetails on new { a.distributionmemberid } equals new { b.distributionmemberid } into b_join from b in b_join.DefaultIfEmpty() join c in psdc.distributionmembers on b.distributionmemberid equals c.id into c_join from c in c_join.DefaultIfEmpty() select new ResultInfo { RecordDate=a.RecordDate,Name=c.Name } public class ResultInfo { public string Name{get;set;} public datetime RecordDate{get;set;} } 大体这样。
你这个代码是把所有的数据全部集中到一个表里么?如果是这样的话,在VIEW里处理就比较复杂了,没办法循环。。。 我的思路是,先把订单详情表处理成这种格式(如下),然后再把三张表连结到一起,最后在VIEW里直接循环就行 送餐员ID,sum(网络付款),sum(现金),sum(欠债) 这样用sql语句或者提LInq能实现么
蝶恋花雨 2015-12-09
  • 打赏
  • 举报
回复
你可以创建一个试图 ,试图里面写好各个关联及想要的字段。然后直接 linq 查询即可。 或者 from a in db.Records join b in db.orderdetails on new { a.distributionmemberid } equals new { b.distributionmemberid } into b_join from b in b_join.DefaultIfEmpty() join c in psdc.distributionmembers on b.distributionmemberid equals c.id into c_join from c in c_join.DefaultIfEmpty() select new ResultInfo { RecordDate=a.RecordDate,Name=c.Name } public class ResultInfo { public string Name{get;set;} public datetime RecordDate{get;set;} } 大体这样。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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