2015-02-24 45 views
-1

我要查询数据库,这样做需要我做了不少内部连接和一对夫妇的左外连接。我在视图中生成了SQL,但我现在在我的应用程序数据层中将它重写到LINQ时有点困难。重塑这种SQL到LINQ(C#,NET 4.5)

FROM   dbo.Organisation 
INNER JOIN 
         dbo.EducationCourseVenue 
INNER JOIN 
         dbo.EducationCourseVenueLocation ON dbo.EducationCourseVenue.Id = dbo.EducationCourseVenueLocation.EducationCourseVenueId ON 
         dbo.Organisation.GlobalEntityGUID = dbo.EducationCourseVenue.GlobalEntityGUID 
INNER JOIN 
         dbo.CommunicationType 
INNER JOIN 
         dbo.CommunicationTypeGlobalEntityMap ON dbo.CommunicationType.Id = dbo.CommunicationTypeGlobalEntityMap.CommunicationTypeId ON 
         dbo.EducationCourseVenue.GlobalEntityGUID = dbo.CommunicationTypeGlobalEntityMap.GlobalEntityGUID 
INNER JOIN 
         dbo.Country 
INNER JOIN 
         dbo.Address ON dbo.Country.Id = dbo.Address.CountryId 
INNER JOIN 
         dbo.CountryRegion ON dbo.Country.RegionId = dbo.CountryRegion.Id ON 
         dbo.CommunicationTypeGlobalEntityMap.CommunicationTypeItemId = dbo.Address.Id 
LEFT OUTER JOIN 
         dbo.AddressPostalDistrictMap 
INNER JOIN 
         dbo.RegionItemDistrictMap ON dbo.AddressPostalDistrictMap.Id = dbo.RegionItemDistrictMap.Id 
INNER JOIN 
         dbo.RegionTypeItem ON dbo.RegionItemDistrictMap.RegionTypeItemId = dbo.RegionTypeItem.Id ON 
         dbo.Address.Id = dbo.AddressPostalDistrictMap.AddressId 
LEFT OUTER JOIN 
         dbo.RHSGarden 
INNER JOIN 
         dbo.AddressGeographics ON dbo.RHSGarden.Id = dbo.AddressGeographics.NearestRHSGardenId ON dbo.Address.Id = dbo.AddressGeographics.AddressId 
WHERE  (dbo.CommunicationType.Code = 'AD') 

SQL的这种特殊的线是一个问题,在LINQ

FROM   dbo.Organisation 
    INNER JOIN 
          dbo.EducationCourseVenue 
    INNER JOIN 
          dbo.EducationCourseVenueLocation ON dbo.EducationCourseVenue.Id = dbo.EducationCourseVenueLocation.EducationCourseVenueId ON 
          dbo.Organisation.GlobalEntityGUID = dbo.EducationCourseVenue.GlobalEntityGUID 

我不知道该怎么做LINQ中没有指定键连接,然后做另一个加盟低于联接。

任何想法?

+0

看到像'LinkPad'工具或表明您正在使用的Linq以便有人可以确定你做错了什么...... – MethodMan 2015-02-24 14:40:36

+0

根据@ NLindbom的回答,看起来像你原来的SQL只是有点困惑。 SQL可能允许这样做,但更具可读性的等价物是每个JOIN有一个ON子句,这使得转换为LINQ变得更加容易。说了这么多,意见不是邪恶的,这可能是一个很好的候选人,而不是转向LINQ。 – Rory 2015-06-24 09:31:06

回答

1
var q = from o in context.Organisation 
     join v in context.EducationCourseVenue on o.GlobalEntityGUID equals v.GlobalEntityGUID 
     join l in context.EducationCourseVenueLocation on v.Id equals l.EducationCouseVenueId 

是我怎么想起来了,因为你的:

FROM   dbo.Organisation 
    INNER JOIN 
          dbo.EducationCourseVenue 
    INNER JOIN 
          dbo.EducationCourseVenueLocation ON dbo.EducationCourseVenue.Id = dbo.EducationCourseVenueLocation.EducationCourseVenueId ON 
          dbo.Organisation.GlobalEntityGUID = dbo.EducationCourseVenue.GlobalEntityGUID 

对应于:

FROM dbo.Organisation as o 
    INNER JOIN dbo.EducationCourseVenue as v ON o.GlobalEntityGUID = v.GlobalEntityGUID 
    INNER JOIN dbo.EducationCourseVenueLocation as l ON v.Id = l.EducationCourseVenueId