C# 写LINQ子查询C

C# 写LINQ子查询C,c#,sql,linq,subquery,sql-to-linq-conversion,C#,Sql,Linq,Subquery,Sql To Linq Conversion,我需要在linq中编写下面的sql查询。我为此编写了linq查询,但没有子查询部分。我不知道如何在linq中编写子查询 我该怎么做?这应该很接近: var query = from pt in part_type join pa in part_availability on new { pt.part_type_id, '2013-06-20' } equals new { pa.pa

我需要在linq中编写下面的sql查询。我为此编写了linq查询,但没有子查询部分。我不知道如何在linq中编写子查询


我该怎么做?

这应该很接近:

var query = from pt in part_type
            join pa in part_availability 
                on new { pt.part_type_id, '2013-06-20' } 
                         equals new { pa.part_type_id, pa.date_ref }
            from x in grp.DefaultIfEmpty()
            select new { part_type = pt, 
                         part_availability = x) };

编辑:我突然想到,日期可能是一个问题——创建DateTime对象并使用该对象而不是字符串值很容易解决。

假设所有表都映射到DbContext上下文

如果零件类型ID上存在FK关系:


dt是DateTime对象。

查看此链接了解如何在Linq@Rahul中编写子查询,谢谢。我会检查它。您需要在联接的第一个匿名类型中指定参数名称,否则由于内联字符串,它将无法编译。我需要按Pt.VEHICLE_ID=409以及pa.date_ref筛选查询。由于名称“r”在当前上下文中不存在,因此出现错误
var query = from pt in part_type
            join pa in part_availability 
                on new { pt.part_type_id, '2013-06-20' } 
                         equals new { pa.part_type_id, pa.date_ref }
            from x in grp.DefaultIfEmpty()
            select new { part_type = pt, 
                         part_availability = x) };
from pt in context.PART_TYPES
join pa in context.PART_AVAILABILITIES on 
        pt.PART_TYPE_ID equals pa.PART_TYPE_ID
where pt.VEHICLE_ID == 409 && 
      pa.DATE_REF.Any(r =­> r.DATE_REF == "2013-06-20")
select new { pt, pa };
from pt in context.PART_TYPES
where pt.VEHICLE_ID == 409 && pt.PART_AVAILABILITY.DATE_REF == "2013-06-20"
select pt;
from pt in context.PART_TYPE
join pa in
    (
        (from PART_AVAILABILITY in context.PART_AVAILABILITY
         where
         PART_AVAILABILITY.DATE_REF == dt
         select new
         {
         PART_AVAILABILITY
         }
        )
    ) 
on new { PART_TYPE_ID = pt.PART_TYPE_ID } equals new { PART_TYPE_ID = pa.PART_AVAILABILITY.PART_TYPE_ID } into pa_join
from pa in pa_join.DefaultIfEmpty()
where
    pt.VEHICLE == 409
select new
{
    PART_TYPE = pt,
    PART_AVAILABILITY = pa.PART_AVAILABILITY                                            
};