Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有select子查询的linq联接表?_C#_Sql_Asp.net_Sql Server_Linq - Fatal编程技术网

C# 具有select子查询的linq联接表?

C# 具有select子查询的linq联接表?,c#,sql,asp.net,sql-server,linq,C#,Sql,Asp.net,Sql Server,Linq,像下面这样的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 =

像下面这样的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 {});
}
public IEnumerable BelgeleriGetir2(int-servicetype,int-formno)
{
var db=新的服务基础();
var结果=(从g开始,单位为db.Y
在db.X中加入d
关于g.id等于d.yid到ps
从ps.DefaultIfEmpty()中的d开始
其中g.servicetype==servicetype&&d.FormNo==FormNo
选择新的{});
}

像这样的linq代码,但它不工作?哪里是真正的方法?

使用子查询,最直接的方法是:

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();

所以您显示了一个sql查询和一个工作linq查询,但非工作linq查询在哪里?第一个代码块是工作sql查询,第二个代码块不是工作linq语句,谢谢“不工作”是什么意思?你有错误吗?怎么了?你得到了意想不到的结果吗?您得到的结果是什么?它们与您期望的结果有何不同?您不是指子查询中的
select x
吗?@NetMage-在他的原始sql中,他从表x中选择字段x:
select x from x
,因此我在第一个linqYes中保持这种方式,但结果是
select x.x
,not
select x
@NetMage-这个问题已经有一段时间了:)你能提醒我你的意思吗?