【问题标题】:SQL query to linq with right and left joins and nested query使用左右连接和嵌套查询对 linq 进行 SQL 查询
【发布时间】:2013-12-02 16:47:49
【问题描述】:

我的sql查询是

SELECT DISTINCT 
  tblProjects.RevID, tblProjects.CEQRNum, tblProjects.ProjectName, GEOCODE.BBL,     tblProjects.BoroID, GEOCODE.BLOCK, GEOCODE.LOT, 
                     tblMilestoneType.MilestoneName, tblMilestone.MilestoneDate
FROM            tblMilestoneType INNER JOIN
                     tblMilestone ON tblMilestoneType.MilestoneID = tblMilestone.MilestoneTypeID RIGHT OUTER JOIN
                     tblProjects ON tblMilestone.RevID = tblProjects.RevID LEFT OUTER JOIN
                     GEOCODE ON tblProjects.RevID = GEOCODE.RevID
WHERE        (
            tblMilestone.MilestoneDate IN (SELECT MAX(tblMilestone.MilestoneDate) AS MilestoneDate
                                          FROM tblMilestone INNER JOIN tblMilestoneType ON tblMilestone.MilestoneTypeID = tblMilestoneType.MilestoneID
                                          GROUP BY tblMilestone.RevID)
         )
ORDER BY tblProjects.RevID

我正在尝试将其转换为 linq。

所以我从

开始
projectList = db.tblMilestoneTypes
                                .Join(db.tblMilestones,
                                    mileType => mileType.MilestoneID,
                                    mile => mile.MilestoneTypeID,
                                    (mileType, mile) => new
                                    {
                                        tblMilestoneType = mileType,
                                        tblMilestone = mile
                                    })
                                .Join(db.tblProjects,                                        
                                    project => project.        // does not work)

也试过了

projectList = from MilestoneTypeTable in db.tblMilestoneTypes 
                          join MilestoneTable in db.tblMilestones  on MilestoneTypeTable.MilestoneID equals MilestoneTable.MilestoneTypeID
                          rig   // no right or left join.

我该怎么做 尼哈

【问题讨论】:

  • 您的解决方案有什么问题? “不起作用”的信息还不够。具体是什么不工作?
  • 我的问题是如何在 linq 中进行左右连接和子查询

标签: c# sql linq


【解决方案1】:

你可以试试

projectList = from MilestoneTypeTable in db.tblMilestoneTypes
                      join MilestoneTable in db.tblMilestones on MilestoneTypeTable.MilestoneID equals MilestoneTable.MilestoneTypeID into MileStones 
from mileStone in MileStones 
join from projects in db.tblProjects
on mileStone.RevID  equals projects.RevID
select new { MileStoneType = MilestoneTypeTable, MileStones = mileStone , Project = projects };

【讨论】:

    【解决方案2】:

    嗯,经过大量的研发,这是我发现的

    1. 具有 LEFT OUTER JOIN 和 RIGHT OUTER JOIN 的 T-SQL 可以转换为仅具有 LEFT OUTER JOIN 的查询

    2. 将子查询作为连接的一部分

    这是查询。

        var query = from ProjectTable in db.tblProjects
                            from GeoCodeTable in db.GEOCODEs.Where(geo => geo.RevID == ProjectTable.RevID).DefaultIfEmpty()
                            from MilestoneTable in db.tblMilestones.Where(mile => mile.RevID == GeoCodeTable.RevID && mile.MilestoneDate == db.tblMilestones.OrderBy(x => x.RevID).Select(x => x.MilestoneDate).Max()).DefaultIfEmpty()
                            from MilestomeTypeTable in db.tblMilestoneTypes.Where(mt => mt.MilestoneID == MilestoneTable.MilestoneTypeID).DefaultIfEmpty()
                select new
                {
                    Milestone = MilestoneTable,
                    Project = ProjectTable,
                    GeoCode = GeoCodeTable,
                    MilestomeType = MilestomeTypeTable 
                };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-16
      • 2011-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多