当前位置: 首页 > 编程语言 > C#

将SQL查询转换为Linq(使用左联接)share

时间:2023-04-11 00:06:26 C#

将SQL查询转换为Linq(使用左联接)此表(下面的表1)包含各种记录类型的状态更改。连接需要设置两个字段以创建有效连接:SubmissionId(状态所属表的pk)和SubmissionTypeId(标识状态所属的表)。创建表##Table1(Idint,Statusvarchar(50),SubmissionIdint,SubmissionTypeIdint)插入##Table1(Id,Status,SubmissionId,SubmissionTypeId)选择1,'Status1',1,1联合选择2,'Status2',1,2CREATETABLE##Table2(IDint,Valuevarchar(50))insertinto##Table2(ID,Value)选择1,'Value1Table2'CREATETABLE##Table3(IDint,Valuevarchar(50))insertinto##Table3(ID,Value)select1,'Value1Table3'selectds.*from##Table1dsleftjoin##Table2dionds.SubmissionId=di.Idandds.SubmissionTypeId=2leftjoin##Table2dronds.SubmissionId=dr.Idandds.SubmissionTypeId=1whereSubmissionTypeIdin(1,2)我尝试了几次迭代xinyinx.DefaultIfEmpty()但我无法正确设置位置where子句。我需要从Table1开始查询,因为这是值的来源。作为一种解决方法,我将查询分成两部分并将状态数据按顺序添加到列表中,但似乎必须有更好的方法。谢谢。我认为您的SQL的直接翻译如下所示:varq=fromdsintable1whereds.SubmissionTypeId==1||ds.SubmissionTypeId==2来自diintable2来自drintable2where(ds.SubmissionTypeId==2&&ds.SubmissionId==di.Id)||(ds.SubmissionTypeId==1&&ds.SubmissionId==dr.Id)选择ds;但是,这似乎不太可能是您想要的。如果我能猜到你的逻辑是什么,我想你更想要这样的东西:以上就是《C#学习教程:将SQL查询转换为Linq(包括左连接)》的全部内容,如果对大家有用并且需要的话学习更多C#学习教程,希望大家多多关注——varq=fromdsintable1where(ds.SubmissionTypeId==2&&table2.Any(di=>ds.SubmissionId==di.Id))||(ds.SubmissionTypeId==1&&table3.Any(dr=>ds.SubmissionId==dr.Id))选择ds;如需转载请注明出处: