首页 > 其他分享 >@@linq left join group

@@linq left join group

时间:2023-06-02 19:22:16浏览次数:44  
标签:join sta fate VIP0 list linq 2022 group id

@@linq left join group

如何实现LINQ的left join group by语法?

 

在LINQ下这样写

var query = (from st in db.Student                              join sc in db.Score on st.id equals sc.sid into g1                              from in g1.DefaultIfEmpty()                              group new { st, t } by new { st.id, st.name, t.sid } into g2                              select new result()                              {                                  id = g2.Key.id,                                  name = g2.Key.name,                                  list = g2.Where(s => s.t != null).Select(s => new ScoreDto() { id = s.t.id, score = s.t.score })                              }).OrderBy(o => o.id).ToList();

结果如下:

1656922529395.png

[   {     "id": 1,     "name""张三",     "list": [       {         "id": 1,         "score": 90.00       }     ]   },   {     "id": 2,     "name""李四",     "list": [       {         "id": 7,         "score": 70.00       },       {         "id": 11,         "score": 75.00       }     ]   },   {     "id": 3,     "name""王五",     "list": [       {         "id": 13,         "score": 60.00       }     ]   },   {     "id": 4,     "name""TOM",     "list": []   },   {     "id": 5,     "name""Lucy",     "list": []   } ]

 

SqlSugar中如何实现呢?

 

 

热忱回答(14

  • fate stafate sta VIP0 2022/7/4

    你可以看一下thenmapper写法,先用一个普通的group select然后在查二级对象

     0  回复
  • fate stafate sta VIP0 2022/7/4 var list = db.Queryable<StudentA>().ToList();//这儿也可以联表查询 db.ThenMapper(list, stu => {   //如果加Where不能带有stu参数,stu参数写到 SetContext   stu.SchoolA=db.Queryable<SchoolA>().SetContext(scl=>scl.SchoolId,()=>stu.SchoolId,stu).FirstOrDefault();       //可以联查询的   //stu.xxxx=db.Queryable<SchoolA>().LeftJoin<XXX>().Select(xxxx).SetContext(....).ToList(); }); // SetContext不会生成循环操作,高性能  和直接Where性能是不一样的

     

     0  回复
  • 摇曳的风筝摇曳的风筝 VIP0 2022/7/5

    @fate sta:

    我用了ThenMapper报错了,我的业务需求是这样的,我有一张日志表R,里面记录了所有设备的每小时整点的情况。

    比如

    DeviceId DataTime value

    D001       2022-06-01 09:00 30

    D002       2022-06-01 09:00 35

    D001       2022-06-01 10:00 20

    大概是这样的一个结构

    现在需要根据传入的查询参数:时间范围,设备编号列表

    得到每个时间范围内每个整点,所选设备的情况。

    比如

    image.png

    我是这样写的,但是现在报错,提示有语法错误。

    1. 1.首先让时间范围内的日期时间列表分页

    2. 2.让所选设备的列表和记录表R左连接查询,保证每个整点中的设备都是有记录的,只是记录结果可能为空。

                            DateTime dtStartTime = strStartTime.ToDate();                         DateTime dtEndTime = strEndTime.ToDate();                         var hours = (int)(dtEndTime.AddHours(1) - dtStartTime).TotalHours;                         var hourArray = Enumerable.Range(0, hours).Select(it => dtStartTime.AddHours(it)).ToList();                         //获取小时分页列表                         data = _db.Reportable(hourArray).ToQueryable<DateTime>().Select(s => new LCS_DataSiteReportOutput()                         {                             DateTime = s.ColumnName.ToString("yyyy-MM-dd HH:mm:00")                         }).OrderBy("ColumnName " + input.sort).ToPagedList(input.currentPage, input.pageSize);                         //获取设备列表                         var queryDevices = _db.Reportable(input.DeviceId).ToQueryable<string>();                         //获取每个小时设备明细数据                         _db.ThenMapper(data.list, res =>                         {                             res.list = queryDevices.LeftJoin(_db.Queryable<LCS_HourDataRecordEntity>(), (d, s) => d.ColumnName == s.DeviceId)                             .Select((d, s) => new LCS_DataSiteReportListOutput()                             {                                 DateTime = s.DataTime.Value.ToString("yyyy-MM-dd HH:mm:00"),                                 DeviceId = s.DeviceId,                                 Value=s.Value                             }).SetContext(d => d.DateTime, () => res.DateTime, res).ToList();                         });

     

    image.png

     

    现在报错提示如下

    image.png

     0  回复
  • 摇曳的风筝摇曳的风筝 VIP0 2022/7/5

    加了as之后,倒是不报这个错误了,但是变了其他错误信息

    image.png

    同时发现一个奇怪的事情,代码中的使用(d, s)会提示别名不一致,我查看了生成的SQL语句发现,别名是用的t,于是换成(t, s)就好了

     0  回复
  • 摇曳的风筝摇曳的风筝 VIP0 2022/7/5

    image.png

     0  回复
  • fate stafate sta VIP0 2022/7/5

    @摇曳的风筝: As<string>(xxx) 全部删掉,他不是一个表你AS什么

     0  回复
  • 摇曳的风筝摇曳的风筝 VIP0 2022/7/5

    @fate sta:没加as这里会报错的,LEFT 左边是一个包起来的子查询,但是没有使用别名,导致这里报LEFT语法错误。

     0  回复
  • fate stafate sta VIP0 2022/7/5

    直接.LeftJoin<表>()

     0  回复
  • 摇曳的风筝摇曳的风筝 VIP0 2022/7/5

    @fate sta:image.png

    会报这个错误

     0  回复
  • 摇曳的风筝摇曳的风筝 VIP0 2022/7/5

    image.png

    直接修改SQL语句加个别名好了

     

     

     0  回复
  • 摇曳的风筝摇曳的风筝 VIP0 2022/7/5

     

    这样写会导致LEFT语法错误

    image.png

     0  回复
  • fate stafate sta VIP0 2022/7/5

    image.png

     

    我这边用最新版本测试可以

     0  回复
  • 摇曳的风筝摇曳的风筝 VIP0 2022/7/5

    @fate sta:升级到最新版之后,确实不报错了,生成的语句也对了

    image.png

     

     

    但是,出现一个新的错误

    image.png

     0  回复
  • 摇曳的风筝摇曳的风筝 VIP0 2022/7/5

    @fate sta:

    没有什么是循环不能解决的,如果有,就再循环一次。哈哈哈

    image.png

     

     

    转 https://www.donet5.com/ask/9/16286

标签:join,sta,fate,VIP0,list,linq,2022,group,id
From: https://www.cnblogs.com/wl-blog/p/17452756.html

相关文章

  • group by 获取最新的数据
    SELECT *FROMxxxAStWHERE 1=1 ANDt.idIN( selectidFROM( SELECT MAX(t.id)id FROM xxxASt WHERE 1=1 GROUPBY t.id_number, t.`class` ORDERBY t.id LIMIT0, 10)a ) ORDERBY t.id LIMIT0, 10......
  • Java并发(九)----线程join、interrupt
    1、join方法详解1.1为什么需要join?下面的代码执行,打印r是什么?staticintr=0;publicstaticvoidmain(String[]args)throwsInterruptedException{  test1();}privatestaticvoidtest1()throwsInterruptedException{  log.debug("开始");  T......
  • Doris(七) -- 修改表、动态和临时分区、join的优化
    修改表修改表名--1.将名为table1的表修改为table2ALTERTABLEtable1RENAMEtable2;--示例ALTERTABLEaggregate_testRENAMEaggregate_test1;--2.将表example_table中名为rollup1的rollupindex修改为rollup2ALTERTABLEbase_table_nameRENAMEROLLUP......
  • sql之left join、right join、inner join的区别
    sql之leftjoin、rightjoin、innerjoin的区别 sql之leftjoin、rightjoin、innerjoin的区别leftjoin(左联接)返回包括左表中的所有记录和右表中联结字段相等的记录 rightjoin(右联接)返回包括右表中的所有记录和左表中联结字段相等的记录innerjoin(等值连接)只返回......
  • Python中的join()函数和split()函数的用法
    题目:CFUltra-FastMathematician 题意:给两个长度相等的0,1字符串,在相同的位置的两个字符不同就输出1,否则输出0.比如:10101000100101就输出:1110001代码:print''.join("10"[i==j]fori,jinzip(raw_input(),raw_input()))join()函数的用法就是把一个list中所有的串按照你定义的分隔......
  • pandas groupby 分组操作
    最一般化的groupby方法是apply.tips=pd.read_csv('tips.csv')tips[:5]新生成一列tips['tip_pct']=tips['tip']/tips['total_bill']tips[:6]根据分组选出最高的5个tip_pct值deftop(df,n=5,column='tip_pct'):returndf.sort_index(by=colum......
  • AD 域从组删除成员命令:Remove-ADGroupMember
    格式[命令][定义组][组名][定义成员][成员列表]注意:成员列表需要使用SamAccountName属性;注意:该删除不仅从组删除成员,并且将用户同时删除;命令remove-adgroupmember-identityITGroup-membershexiaohan,hexiaoyi确认是否确实要执行此操作?正在目标“CN=ITGroup,OU=......
  • StringJoiner
         ......
  • ef/efcore/sqlsugar group by字段 orderby count的写法
    ef/efcore:以datatype字段分组后按count倒序:varlist=db.table1.GroupBy(x=>x.DataType).Select(group=>new{group.Key,Count=group.Count()}).OrderByDescending(x=>x.Count).ToList(); sqlsugar:sqlsugargroupBy的返回值不是IQueryable<IGrouping<key,model>......
  • nacos服务下线操作时报错:The Raft Group [naming_instance_metadata] did not find th
    【问题描述】caused:errCode:500,errMsg:dometadataoperationfailed;caused:com.alibaba.nacos.consistency.exception.ConsistencyException:TheRaftGroup[naming_instance_metadata]didnotfindtheLeadernode;caused:TheRaftGroup[naming_instance_metad......