Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将sql查询更改为linq?_Sql_Linq_Sql To Linq Conversion - Fatal编程技术网

如何将sql查询更改为linq?

如何将sql查询更改为linq?,sql,linq,sql-to-linq-conversion,Sql,Linq,Sql To Linq Conversion,如何将此sql查询更改为linq?我有三个连接,最后一个连接是selectquery select mod.ModSerial, met.MetSerial, met.WaterNo, met.PowerNo, Gro.GroupDate from MetlDB.dbo.tblMet AS met join MetDB.dbo.tblMod AS mod on mod.ModID= met.ModID_FK

如何将此sql查询更改为linq?我有三个连接,最后一个连接是selectquery

select  mod.ModSerial,
        met.MetSerial,
        met.WaterNo,
        met.PowerNo,
        Gro.GroupDate
     from MetlDB.dbo.tblMet AS met
     join MetDB.dbo.tblMod AS mod on mod.ModID= met.ModID_FK  
     join MetDB.dbo.tblGroupData As Gro on Gro.MetID_FK= met.MetID
     join(select MetID_FK,
           max(GroupDataID) as maxgroupdata
           from MetDB.dbo.tblGroupData
           group by MetID_FK) g on met.MetID=g.MetID_FK and Gro.GroupDataID=g.maxgroupdata
给你,漂亮的:

    using (MetDBEntities ctnx = new MetDBEntities())
    {
        var query1 = from grp in ctnx.tblGroupDatas
                     group grp by grp.MetID_FK into g
                     let maxId = g.Max(gId => gId.GroupDataID)
                     select new { metId = g.Key, maxId };

        var query2 = from met in ctnx.tblMets
                     from mod in ctnx.tblMods.Where(mo => mo.ModId == met.ModId_fk)
                     from grp in ctnx.tblGroupDatas.Where(gr => gr.MetID_FK == met.MetId)
                     from q1 in query1.Where(q => q.metId == met.MetId && grp.GroupDataID == q.maxId)
                     select new { mod.ModSerial, met.MetSerial, met.Waterno, met.powerno, grp.GroupDate };

        var result = query2.ToList();
    }
编辑: 我根据以下评论修改了我的答案:


此方法将导致较大数据集出现问题,因为 从tblMets和tblMods获取每条记录,并从 数据库进入内存


此方法将导致较大数据集出现问题,因为您将来自数据库的tblMets、tblMods和tblGroupDatas的每条记录都存储到内存中。您可以使用DB实体直接查询数据库:var query1=from grp in ctnx.tblMets group grp by grp.MetID_FK into g let maxId=g.Max(gId=>gId.GroupDataID)选择new{MetID=g.Key,maxId}@Luc,u r完全正确,但这不是性能问题,我想展示如何逐步完成sql到linq的转换。@Luc非常感谢。我使用你的解决方案。