【问题标题】:SQL to LINQ (to implement LEFT JOIN)SQL to LINQ(实现 LEFT JOIN)
【发布时间】:2015-03-25 15:14:30
【问题描述】:

我有一个下面的 SQL 查询,它有一些 GroupBy、条件等更复杂,我在帖子中跳过这些以使我的问题变得简单:

SELECT 
    SUBSTRING(TSL.ctg_name, 6, 100) AS 'TREKK', *

    FROM Filteredctg_timbersettlementline AS TSL 

    INNER JOIN Filteredctg_timbersettlement AS TS 
        ON TSL.ctg_timbersettlementid = TS.ctg_timbersettlementid 
    LEFT JOIN FilteredNew_property AS P 
        ON TS.ctg_propertyid = P.new_propertyid

    WHERE (TS.ctg_timbersettlementid = @TimberSettlementID) AND
          (TSL.ctg_reportgroup = 'TREKK')

我在 Linq 下面试过了:

var Trekks = (from ts in XrmContext.ctg_timbersettlementSet

              join tsl in XrmContext.ctg_timbersettlementlineSet
                  on ts.Id equals tsl.ctg_timbersettlementid.Id
              join p in XrmContext.New_propertySet
                  on ts.ctg_propertyid.Id equals p.New_propertyId

              into temp
              from p in temp.DefaultIfEmpty()

              where ts.ctg_timbersettlementId == TimberSettlementGuid
              where tsl.ctg_reportgroup == "TREKK"
              select new
              {
                  tsl.ctg_name,
                  ts.ctg_BasisAllocatedForestryFund,
              }).ToList();

它给我一个错误: 方法“GroupJoin”不能跟随方法“Join”或不受支持。尝试根据支持的方法编写查询,或者在调用不受支持的方法之前调用“AsEnumerable”或“ToList”方法。

如何实现 LEFT JOIN?

【问题讨论】:

  • 你在两个查询之间改变了一些东西......在原始查询中,有一个 FROM,一个带有 FROM 的 JOIN,一个带有 INNER JOIN 的 LEFT JOIN,而在 LINQ 查询中,两个 JOIN 都反对来自。尝试在 SQL 中进行查询
  • 所以从 ctg_timbersettlementlineSet 开始,然后加入 ctg_timbersettlementSet,最后离开加入 New_propertySet

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


【解决方案1】:

要实现左连接,需要使用中介 DefaultIfEmpty() :

var query = from c in db.Customers
            join o in db.Orders
               on c.CustomerID equals o.CustomerID into sr
            from x in sr.DefaultIfEmpty()
            select new {
               CustomerID= c.CustomerID, ContactName=c.ContactName,
               OrderID = x.OrderID == null ? -1 : x.OrderID};   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多