首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 请教LINQ中对于多表嵌套查询的SQL对应语句写法。
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yongyao_cn
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 揭贴率:
    发表于:2008-08-22 17:25:13 楼主
    初次接触,很多内容还不熟悉,自己也查了不少帖子,不过还不是特别明白,希望熟悉的朋友能帮忙解答。

    简单的查询写法我还是知道的,如下:
    比如Select table_a.* from table_a
    C# code
    var query = from tb_a in sqlHelper.TABLE_A select tb_a;


    那么TABLE_A,TABLE_B两个表(关联为m_id)的语句如下时该怎么写:
    select tb_a.*,isnull(tb_b.flag,1) as flag
      from table_a tb_a
      left join (select m_id,flag from table_b where flag = 0) tb_b
      on tb_a.m_id = tb_b.m_id
    20  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • wuxiao_v
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 10:04:191楼 得分:0
    楼主应该换思维方式了,如果按照你这个思路就没有比较用ORM了.

    事实是这样的

     
    C# code
    var query = from tb_a in sqlHelper.TABLE_A select tb_a; TABLE_A ta= query.First<TABLE_A>(); //由于TABLE_B和TABLE_A是有关联的所以Linq会自动帮你把TABLE_B也查询出来并且装到对象里 //可以这么用TABLE_B tb= ta.TABLE_B;就得到tb的对象了;如果TABLE_B是主键的话

               
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yanrabbit163
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 10:22:432楼 得分:0
    C# code
    var query = from tb_a in sqlHelper.TABLE_A join tb_b in sqlHelper.TABLE_B on tb_b.m_id equals tb_a.m_id select new {TBA = tb_a,TBB = tb_b};
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • EnterpriseLibrary
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-24 10:28:083楼 得分:0
    我想这样也能查出来吧。
    B和A有关系,B指向A
    var query = from c in sqlHelper.A
                select new {a=c.AID,v=c.B.BID};
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yongyao_cn
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 09:38:334楼 得分:0
    首先感谢几位的解答。

    我明白需要换思维方式来解决这样得查询,按标准得SQL估计是不行了。所以才来求教SQL中这样得查询在LINQ中是否还可以一步实现? 还是说只有分解步骤的方式来完成?

    TB_A和TB_B在数据上并不是完全对应的,可能在TB_A中有的M_ID记录在TB_B中不存在,所以SQL里我写的是LEFT JOIN。
    我来求教这个问题的主要目的也不是只为解决这个查询,因为仅仅要达到这个查询的目的,把他按我现在已经理解的查询方式分解成几步处理当然是可以实现的。只是代码编写上繁琐点。

    主要还是想问问,这种稍微复杂点的嵌套查询,在LINQ中是否支持?或者说有什么对应的写法来实现? 还是说没法直接一步实现。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • FengLing7885
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 11:23:415楼 得分:0
    (from tab_a in sqlHelper.TABLE_A from tab_b in
    sqlHelper.TABLE_B where tab_a.id=tab_b.id select tab_a).skip(1)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yongyao_cn
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-25 14:18:206楼 得分:0
    咨询了一位朋友帮忙解决了,把方法放在这,有需要的朋友可以看看。
    C# code
    var query = from tb_a in sqlHelper.TABLE_A join tb_b in (from tmp_tb in sqlHelper.TABLE_B where tmp_tb.flag == 0 select tmp_tb) on tb_a.seat_num equals tb_b.seat_num into tmp from tb_seat_stat in tmp.DefaultIfEmpty() select new { seat_num = tb_a.seat_num, location_x = tb_a.location_x, location_y = tb_a.location_y, flag = tb_seat_stat.flag != null };
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved