2010-04-20 4 views
0

J'ai besoin de convertir le Sproc ci-dessous à une requête Linq. Au fond, c'est ce que j'ai jusqu'ici. Pour référence, les champs derrière la "Splat" (pas mon sproc) sontConvertir SQL avec interne et externe Joindre à L2S

ImmunizationID int, HAReviewID int, ImmunizationMaintID int, ImmunizationOther varchar(50), ImmunizationDate smalldatetime, ImmunizationReasonID int

Les deux premiers sont PK et FK, respectivement. Les deux autres int sont attachés à la table Maint où la description est stockée. Voilà ce que je suis coincé sur le INNER JOIN ET le LEFT OUTER JOIN

Merci,

SELECT tblHAReviewImmunizations.*, 
     tblMaintItem.ItemDescription, 
     tblMaintItem2.ItemDescription as Reason 
FROM 
     dbo.tblHAReviewImmunizations 
     INNER JOIN dbo.tblMaintItem 
      ON dbo.tblHAReviewImmunizations.ImmunizationMaintID = 
       dbo.tblMaintItem.ItemID 
     LEFT OUTER JOIN dbo.tblMaintItem as tblMaintItem2 
      ON dbo.tblHAReviewImmunizations.ImmunizationReasonID = 
       tblMaintItem2.ItemID 
WHERE 
     HAReviewID = @haReviewID 

Ma tentative à ce jour ->

public static DataTable GetImmunizations(int haReviewID) 
{ 
    using (var context = McpDataContext.Create()) 
    { 
     var currentImmunizations = 
      from haReviewImmunization in context.tblHAReviewImmunizations 
      where haReviewImmunization.HAReviewID == haReviewID 
      join maintItem in context.tblMaintItems 
       on haReviewImmunization.ImmunizationReasonID 
       equals maintItem.ItemID into g 
      from maintItem in g.DefaultIfEmpty() 
      let Immunization = GetImmunizationNameByID(
       haReviewImmunization.ImmunizationMaintID) 
      select new 
      { 
       haReviewImmunization.ImmunizationDate, 
       haReviewImmunization.ImmunizationOther, 
       Immunization, 
       Reason = maintItem == null ? " " : maintItem.ItemDescription 
      }; 

     return currentImmunizations.CopyLinqToDataTable(); 
    } 
} 

private static string GetImmunizationNameByID(int? immunizationID) 
{ 
    using (var context = McpDataContext.Create()) 
    { 
     var domainName = 
      from maintItem in context.tblMaintItems 
      where maintItem.ItemID == immunizationID 
      select maintItem.ItemDescription; 

     return domainName.SingleOrDefault(); 
    } 
} 

Répondre

1
public static DataTable GetImmunizations(int haReviewID) 
{ 
    using (var context = McpDataContext.Create()) 
    { 
     var currentImmunizations = 
      from haReviewImmunization in context.tblHAReviewImmunizations 
      where haReviewImmunization.HAReviewID == haReviewID 

      join maintItem in context.tblMaintItems 
      on haReviewImmunization.ImmunizationMaintID 
      equals maintItem.ItemID 

      join maintItem2 in context.tblMaintItems 
      on haReviewImmunization.ImmunizationReasonID 
      equals maintItem2.ItemID into g 
      from maintItem3 in g.DefaultIfEmpty() 

      select new 
      { 
       haReviewImmunization.ImmunizationDate, 
       haReviewImmunization.ImmunizationOther, 
       maintItem.ItemDescription, 
       Reason = maintItem3 == null ? " " : maintItem3.ItemDescription 
      }; 

     return currentImmunizations.CopyLinqToDataTable(); 
    } 
} 
+0

Merci, semble si simple quand il me regarde en face! –

+0

Pas de soucis, c'est une super photo btw! – Bermo

+0

Une question de suivi; est-ce partie -> 'dans g de maintItem3 dans g.DefaultIfEmpty()' ce qui fait que la seconde jointure un 'LEFT OUTER JOIN'? –

Questions connexes