Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将存储过程成功转换为Linq表达式_C#_Sql Server_Linq - Fatal编程技术网

C# 无法将存储过程成功转换为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]

如何将此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,
                                             });
下面是显示错误的行


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。