Мне нужно преобразовать приведенный ниже 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();
}
}