问题描述
intuserID=3;select*fromtable1whereuserIDin(selectuserIDfromtable2wheretable2.table1ID=table1.ID)上面的SQL中的where使用了子查询,在LINQ中怎样使用?
解决方案
解决方案二:
本帖最后由 q107770540 于 2014-11-05 15:55:27 编辑
解决方案三:
Irecommendyouusethiscode:varquery=fromt1indb.table1joint2indb.table2ont1.IDequalst2.table1IDwheret2.userID==userIDselectt1;
解决方案四:
在上一个Iquerable对象下继续做一个查询,或者用lambda
解决方案五:
lambda表达式
解决方案六:
比较简单,比较容易阅读的方法:varsubwhere=子查询varquery=fromtintable1wheresubwhere.Any(f=>f==t.userID)selectt;BTW,你这句sql的逻辑有问题吧
解决方案七:
引用5楼wjq的回复:
BTW,你这句sql的逻辑有问题吧
同意。实际上如果sql都不能写成“连接运算”的人,很可能逻辑上经常绕在问题里出不来。
解决方案八:
引用楼主qha_cn的回复:
intuserID=3;select*fromtable1whereuserIDin(selectuserIDfromtable2wheretable2.table1ID=table1.ID)
如果你在学习sql语言,那么你的老师一定要求你把这种查询要写为innerjoin的。
解决方案九:
在HAVING子句中使用子查询过滤数据//查询数据库信息//<returns>方法返回DataTable对象</returns>privateDataTableGetStudent(){stringP_Str_ConnectionStr=string.Format(//创建数据库连接字符串@"server=WIN-GI7E47AND9RLS;database=db_TomeTwo;uid=sa;pwd=");stringP_Str_SqlStr=string.Format(//创建SQL查询字符串@"SELECT所在学院,学生姓名,年龄,(SELECTAVG(年龄)FROMtb_Student)AS平均年龄FROMtb_StudentGROUPBY所在学院,学生姓名,年龄HAVING年龄>(SELECTAVG(年龄)FROMtb_Student)");//codego.net/SqlDataAdapterP_SqlDataAdapter=newSqlDataAdapter(//创建数据适配器P_Str_SqlStr,P_Str_ConnectionStr);DataTableP_dt=newDataTable();//创建数据表P_SqlDataAdapter.Fill(P_dt);//填充数据表returnP_dt;//返回数据表}
解决方案十:
intuserID=3;select*fromtable1whereuserIDin(selectuserIDfromtable2wheretable2.table1ID=table1.ID)varquery=fromt1intable1joint2intable2onnew{tableId=t1.ID,t1.userID}equalsnew{tableId=t2.table1ID,t2.userId}selectt1;帮你改成表连,问题是你这句sql语句本身就有问题吧?
解决方案十一:
sql写法+lamb写法,妥妥的……sql写法加sql写法其实也是可以的