【问题标题】:Convert sql query to Linq or lambda将 sql 查询转换为 Linq 或 lambda
【发布时间】:2016-01-11 05:02:58
【问题描述】:

我在 sql server 中有以下查询:

select * from
A as a where a.UserId in(select b.id from  B as b) and a.Company is null 

谁能帮我写 linq 或 Lambda 表达式。任何帮助表示赞赏。

【问题讨论】:

  • 请不要只转储 SQL 并要求转换。至少显示一个类模型,以便导航属性和关联的多样性是可见的。此外,请说明您的目标是什么类型的 LINQ(针对实体?),展示您自己的初步努力。他们向我们解释的内容比您想象的要多。

标签: sql linq lambda


【解决方案1】:

您可以使用 Contains,它不会生成 IN 子查询,而是生成 EXIST 子查询,但它会非常接近您的原始 SQL

var q1 = context.B
    .Select(item=>item.Id);

var q2 = context.A
    .Where(a=>q1.Contains(a.UserId))
    .Where(a=>a.Company == null); // Calling where twice for readability, will generate the same SQL as if you had both weres on a single line with AND, no performance overhead for doing so

或者如果您更愿意将它写成一个块(将生成相同的 SQL)

var q2 = context.A
    .Where(a=>context.B
          .Select(item=>item.Id).Contains(a.UserId))
    .Where(a=>a.Company == null);

【讨论】:

    【解决方案2】:
    var x= (from a in db.Table1 
            join b in dbTable2 on a.UserId equals b.id
            where a.Company == null
            select a).ToList();
    

    【讨论】:

      【解决方案3】:

      使用连接

      var t = (from a in entites.b.ToList()
               from b in entites.a.where(x=>x.UserId ==a.id && x.Company==null).ToList()
               select b).ToList();
      

      【讨论】:

      • @Timeout 它是这样的连接 where(x=>x.UserId ==a.id) 指的是不同的连接在 linq
      • @Timeout 我认为您没有阅读查询。表 a 不应返回所有数据,它仅返回基于条件的数据
      猜你喜欢
      • 2018-09-23
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多