Не удалось преобразовать хранимую процедуру в выражение Linq - PullRequest
0 голосов
/ 11 мая 2019

Как я могу преобразовать эту хранимую процедуру SQL Server в выражение linq?У меня есть пара ошибок, но я не знаю, как их исправить.

Вот хранимая процедура:

    @MatterNumber NVARCHAR(20)
AS
    DECLARE @ClientNumber INT = (SELECT TOP 1 LeadPlaintiffNumber 
                                 FROM [dbo].[vw_cmp_case_numbers] 
                                 WHERE MatterNumber = @MatterNumber)

    SELECT DISTINCT 
        defendantid, 
        defendantcode, 
        defendantname DefendantName 
    FROM   
        (SELECT DISTINCT 
             fmrp.employerid DefendantId, 
             fmrp.employercode DefendantCode, 
             fmrp.employername DefendantName 
         FROM   
             vw_mpid_records fmr 
         LEFT JOIN 
             vw_mpid_records_products fmrp ON fmr.recordid = fmrp.recordid 
         INNER JOIN 
             vw_cmp_event_history fceh ON fmr.jobsitecode = fceh.jobsitecode 
                                       AND fmr.startdate < = fceh.enddate 
         WHERE  
             fceh.clientnumber = @ClientNumber 
             AND fmrp.employerid IS NOT NULL 
             AND fmrp.employercode IS NOT NULL 
         GROUP BY 
             fmrp.employerid, fmrp.employercode, fmrp.employername) yyy 
ORDER BY 
    defendantname 

Вот что у меня есть для linq, ноесть ошибка в

fmr.StartDate <= fceh.EndDate

, и тогда я не уверен насчет группы также

var @clientNumber = (from ccn in context.VwCmpCaseNumbers where ccn.MatterNumber == text select ccn).Take(1);

var innerQuery = from fmr in context.VwMpidRecords
                 join fmrp in context.VwMpidRecordsProducts on fmr.Id equals fmrp.Id
                 into gj
                 from x in gj.DefaultIfEmpty()
                 join fceh in context.VwCmpEventHistorys on fmr.JobsiteCode equals fceh.JobsiteCode && fmr.StartDate <= fceh.EndDate
                 where fceh.ClientNumber = @clientNumber &&
                       fmrp.EmployerID != null && 
                       fmrp.EmployerCode != null
                 group fmrp.by fmrp.EmployerID && fmrp.EmployerCode && fmrp.EmployerName

var outerQuery = (from r in innerQuery 
                  select new 
                         {
                             EmployerId = r.EmployerID,
                             EmployerCode = r.EmployerCode,
                             EmployerName = r.EmployerName
                         }).OrderBy(obj => obj.DefendantName);

var viewModel = outerQuery.Select(obj => new SelectOption 
                                             {
                                                   Text = obj.DefendantCode,
                                                   Value = obj.DefendantId,
                                             });

Вот строки, которые показывают ошибки

enter image description here

1 Ответ

1 голос
/ 11 мая 2019

LINQ не позволяет вам «присоединяться» по любым критериям: объединение может иметь только форму [this] equals [that].Переместите все критерии, которые не соответствуют этому шаблону, в предложение where.(Это не повлияет на производительность SQL-запроса.)

Кроме того, group by значения должны содержаться в одном (анонимном) объекте, а не && вместе.

var innerQuery = from fmr in context.VwMpidRecords
join fmrp in context.VwMpidRecordsProducts
on fmr.Id equals fmrp.Id
join fceh in context.VwCmpEventHistorys
on fmr.JobsiteCode equals fceh.JobsiteCode
where fmr.StartDate <= fceh.EndDate
where fceh.ClientNumber = @clientNumber
where fmrp.EmployerID != null && fmrp.EmployerCode != null
group fmrp by new {fmrp.EmployerID, fmrp.EmployerCode, fmrp.EmployerName};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...