【问题标题】:linq join tables with select subquery?linq 使用选择子查询连接表?
【发布时间】:2016-10-24 14:51:48
【问题描述】:

如下所示的 SQL 查询,我正在尝试使其成为 LinQ,但它不工作 sql 工作但 linq 不工作......我的错误在哪里?

select (select X from X where X.yid=Y.id and X.FormNo=4),* 
from Y 
where Y.servicetype=3

这个 sql 查询正在运行

public IEnumerable<NBelge> BelgeleriGetir2(int servicetype, int formno)
{
    var db = new SERVISBAKIMEntities();
    var result = (from g in db.Y
                  join d in db.X
                  on g.id equals d.yid into ps
                  from d in ps.DefaultIfEmpty()
                  where g.servicetype == servicetype && d.FormNo == formno
                  select new {});
}

这样的linq代码,但它不起作用?真道在哪里?

【问题讨论】:

  • 所以你显示了一个 sql 查询和一个工作的 linq 查询,但是你的非工作 linq 查询在哪里?
  • 第一个代码块是 sql 查询,第二个代码块是不是 linq 语句,谢谢
  • “不工作”是什么意思?你有错误吗?有什么错误?你是否得到了意想不到的结果?您得到的结果是什么?它们与您预期的结果有何不同?

标签: c# sql asp.net sql-server linq


【解决方案1】:

最直接的,使用子查询,是这样的:

var result = (from y in db.Y
              where y.servicetype == 3
              select new { y, x = (from x in db.X 
                                   where x.yid == y.id && x.FormNo == 4 
                                   select x.x).FirstOrDefault() }
             ).ToList();

但我认为join 的使用更具可读性。在 sql 中它看起来像这样:

select X.x, Y.*
from Y
join X on Y.id == X.yid
where Y.servicetype == 3
and X.FormNo == 4

使用 linq:

var result = (from y in db.Y
              where y.servicetype == 3
              join x in db.X on y.id equals x.yid
              where x.FormNo == 4
              select new { y, x }).ToList();

【讨论】:

  • 你不是说子查询中的select x吗?
  • @NetMage - 在他的原始 sql 中,他从表 x 中选择字段 x:select X from X 所以我在第一个 linq 中保持这种方式
  • 是的,但结果是select x.x,而不是select x
  • @NetMage - 这个问题已经有一段时间了 :) 你能提醒我你的意思吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-20
  • 2015-01-23
  • 1970-01-01
  • 2015-05-24
相关资源
最近更新 更多