У меня много проблем с созданием эквивалента Linq этой устаревшей хранимой процедуры. Самым большим препятствием является , похоже, он не хочет, чтобы я добавил второе «предложение» к соединению с tblAddress
. Я получаю ошибку Cannot resolve method...
. , что tblBusiness.tblAddress
рассматривается как EntitySet<tblAddress>
См. Внизу для текущих усилий.
Кто-нибудь может указать, что я делаю неправильно? Ниже, first , SPROC
, который мне нужно конвертировать, и second , моя LINQ
попытка на данный момент; что ПОЛНОСТЬЮ ОТКАЗА!
Спасибо
SELECT dbo.tblPersonInsuranceCoverage.PersonInsuranceCoverageID,
dbo.tblPersonInsuranceCoverage.EffectiveDate,
dbo.tblPersonInsuranceCoverage.ExpirationDate,
dbo.tblPersonInsuranceCoverage.Priority,
dbo.tblAdminInsuranceCompanyType.TypeName AS CoverageCategory,
dbo.tblBusiness.BusinessName,
dbo.tblAdminInsuranceType.TypeName AS TypeName,
CASE WHEN dbo.tblAddress.AddressLine1 IS NULL THEN '' ELSE dbo.tblAddress.AddressLine1 END
+ ' ' +
CASE WHEN dbo.tblAddress.CityName IS NULL THEN '' ELSE '<BR>' + dbo.tblAddress.CityName END
+ ' ' +
CASE WHEN dbo.tblAddress.StateID IS NULL THEN ''
WHEN dbo.tblAddress.StateID = 'ns' THEN ''
ELSE dbo.tblAddress.StateID END AS Address
FROM
dbo.tblPersonInsuranceCoverage
LEFT OUTER JOIN dbo.tblInsuranceCompany
ON dbo.tblPersonInsuranceCoverage.InsuranceCompanyID = dbo.tblInsuranceCompany.InsuranceCompanyID
LEFT OUTER JOIN dbo.tblBusiness
ON dbo.tblBusiness.BusinessID = dbo.tblInsuranceCompany.BusinessID
LEFT OUTER JOIN dbo.tblAddress
ON dbo.tblAddress.BusinessID = dbo.tblBusiness.BusinessID and tblAddress.AddressTypeID = 'b'
LEFT OUTER JOIN dbo.tblAdminInsuranceCompanyType
ON dbo.tblPersonInsuranceCoverage.InsuranceCompanyTypeID = dbo.tblAdminInsuranceCompanyType.InsuranceCompanyTypeID
LEFT OUTER JOIN dbo.tblAdminInsuranceType
ON dbo.tblPersonInsuranceCoverage.InsuranceTypeID = dbo.tblAdminInsuranceType.InsuranceTypeID
WHERE tblPersonInsuranceCoverage.PersonID = @PersonID
var coverage =
from insuranceCoverage in context.tblPersonInsuranceCoverages
where insuranceCoverage.PersonID == personID
select
new
{
insuranceCoverage.PersonInsuranceCoverageID,
insuranceCoverage.EffectiveDate,
insuranceCoverage.ExpirationDate,
insuranceCoverage.Priority,
CoverageCategory = insuranceCoverage.tblInsuranceCompany.tblAdminInsuranceCompanyType.TypeName,
insuranceCoverage.tblInsuranceCompany.tblBusiness.BusinessName,
TypeName = insuranceCoverage.InsuranceTypeID,
Address = insuranceCoverage.tblInsuranceCompany.tblBusiness.tblAddresses
.Where(a => a.AddressTypeId = 'b')
.FirstOrDefault()
};
РЕДАКТИРОВАТЬ для дальнейшей попытки
Итак, я добавил несколько ассоциаций в dbml, чтобы воспользоваться советом Крейга ниже. Это почти работает. Теперь я получаю Cannot resolve symbol
на a.AddressTypeID
. Странно то, что Intellisense говорит мне, что tblAddress
- это EntitySet<tblAdress>
. Я пропускаю ассоциацию или у меня неправильная ассоциация, или я просто СЛИШКОМ много уровней?
Мысли