繁体   English   中英

从SQL到LINQ(实现LEFT JOIN)

[英]SQL to LINQ (to implement LEFT JOIN)

我在SQL查询下面有一个查询,它比较复杂,有一些GroupBy,Conditions等。为了简化我的问题,我在这里跳过了以下内容:

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

它扔我一个错误:方法“群组加入”不能跟随法“加入”或不被支持。 尝试使用受支持的方法编写查询,或者在调用不受支持的方法之前调用“ AsEnumerable”或“ ToList”方法。

我怎样才能达到LEFT JOIN?

要实现左连接,您需要使用中介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};   

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM