【问题标题】:How to write nested query in Linq如何在 Linq 中编写嵌套查询
【发布时间】:2010-11-18 06:49:05
【问题描述】:

我有两张桌子

  1. 用户管理员
  2. 区域管理员

我的sql查询是这样的:

select * from tblArea  where areaid
not in (select areaid from
tblUserMaster)

请告诉我如何在 linq 中编写这样的嵌套查询

【问题讨论】:

    标签: c# sql linq


    【解决方案1】:
    var result = tblArea.Where(x => !tblUserMaster.Any(m => m.areaid == x));
    

    【讨论】:

    • linq to sql不行,只能做原始类型
    • 我已经检查过了,但它不起作用。当我尝试在其上使用 foreach 时,它生成异常:无法格式化节点“新”以执行 SQL。
    • 谢谢!我写的时候它的工作: var result = tblArea.Where(x => !tblUserMaster.Any(m => m.areaid == x.areaid));
    【解决方案2】:

    我找不到任何可以执行以下操作的好方法:

    var tb1 = tblUserMaster.ToList();
    var result = tblArea.AsEnumerable().Where(x => !tb1.Any(m => m.areaid == x));
    

    但这不是一个好方法,最好编写存储过程而不是将所有数据加载到客户端。可能有人可以做得更好,但我认为它无法改进。

    AsEnumerable() 关键字从 linq->sql 移动到纯 linq,但它会加载所有数据。

    【讨论】:

    • @Rajesh Rolen- DotNet 开发人员,可以使用 tblUserMaster.ToList().Any(m => m.areaid == x) 工作
    • 现在它在我写的时候工作: var tb1 = tblUserMaster.ToList(); var 结果 = tblArea.AsEnumerable().Where(x => !tb1.Any(m => m.areaid == x.areaid));
    【解决方案3】:

    试试这个

    var result=from tblarea in db.TblArea
    where
      !
        (from tblusermaster in db.TblUserMaster
        select new {
          tblusermaster.Areaid
        }).Contains(new { tblarea.Areaid })
    select new {
      tblarea.Areaid,
      tblarea.Column1,
      tblarea.Column2
    }
    

    【讨论】:

    • 你遇到了什么错误,我在我的机器上尝试了这个版本的工作版本,它运行良好。
    猜你喜欢
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多