C# 无法将存储过程成功转换为Linq表达式
如何将此SQL Server存储过程转换为linq表达式?我有几个错误,但不知道如何改正 以下是存储过程:C# 无法将存储过程成功转换为Linq表达式,c#,sql-server,linq,C#,Sql Server,Linq,如何将此SQL Server存储过程转换为linq表达式?我有几个错误,但不知道如何改正 以下是存储过程: @MatterNumber NVARCHAR(20) AS DECLARE @ClientNumber INT = (SELECT TOP 1 LeadPlaintiffNumber FROM [dbo].[vw_cmp_case_numbers]
@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,
});
下面是显示错误的行
LINQ不允许您根据任何条件加入:一个加入只能有一个[this]等于[that]形式。将与该模式不匹配的任何条件移动到where子句中。这不会影响SQL查询的性能 此外,GROUPBY值需要包含在单个匿名对象中,而不是一起&&D
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};
也许值得像在fmr.JobsiteCode等于fceh.JobsiteCode和move fmr.StartDate上那样加入。我放弃我的答案,在这里添加剩余部分:未识别的fmrp是因为它超出了into子句的范围。它在后面的from子句中被命名为x。不过,它可以重用:从gj.DefaultIfEmpty中的fmrp。我现在在fmrp.EmployerID!=null&&fmrp.EmployerCode!=null,其中显示“名称fmrp在当前上下文中不存在”@user1186050-进行我建议的更改。它解决了无法识别的标识符错误。那么这是否意味着我使用了x而不是fmrp?@user1186050-您可以这样做,但更好的做法是重用名称fmrp,而不是将其称为x。再次重申,将gj.DefaultIfEmpty中的x更改为gj.DefaultIfEmpty中的fmrp。