Преобразование SQL с помощью внутреннего и внешнего соединения в L2S - PullRequest
0 голосов
/ 20 апреля 2010

Мне нужно преобразовать приведенный ниже Sproc в запрос Linq. В самом низу это то, что я имею до сих пор. Для справки, поля за "сплатом" ( не мой sproc ):

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

Первые два - PK и FK соответственно. Два других int являются связью с Maint Table, где хранится описание. Это то, на чем я застрял: INNER JOIN И LEFT OUTER JOIN

Спасибо

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

Моя попытка до сих пор ->

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

1 Ответ

1 голос
/ 21 апреля 2010
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();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...