繁体   English   中英

将SQL查询转换为Linq但没有得到任何结果

[英]Converted sql query to linq but not getting any result

我是Linq和Entity Framework的新手。

以下是我的工作存储过程,其中包括一个用逗号分隔的字符串( SUBSTRING子句)

SELECT DISTINCT 
    SR.StudentRequestId, 
    SR.RegistrationId, 
    SR.Location,
    SR.PaymentMethod, 
    SR.CreatedOn, 
    C.ClassName, 
    CC.CampusName, 
    CASE WHEN ISNULL(TSR.StatusId,0)=0 THEN 1 ELSE TSR.StatusId END AS StatusId, 
    SUBSTRING(
        (SELECT', ' + REPLACE(REPLACE(ST1.FromTime,'AM',''),'PM','') + '-'+ ST1.ToTime AS [text()]
         FROM dbo.StudentRequestTimings ST1
         WHERE ST1.StudentRequestId = SRT.StudentRequestId
         ORDER BY ST1.CreatedOn FOR XML PATH ('')
        ), 2, 1000) [Time] FROM StudentRequest SR
    INNER JOIN Registration R ON R.RegistrationId = SR.RegistrationId
    INNER JOIN Campus CC ON CC.CampusId = R.CampusId
    INNER JOIN Class C ON C.ClassId = SR.ClassId
    LEFT JOIN TutorClasses TC ON SR.ClassId = TC.ClassId
    LEFT JOIN StudentRequestTimings SRT ON SR.StudentRequestId = SRT.StudentRequestId
    LEFT JOIN TutorStudentRequest TSR ON TSR.StudentRequestId = SRT.StudentRequestId AND TutorId = @RegistrationId
    WHERE TC.RegistrationId = @RegistrationId
    ORDER BY SR.CreatedOn DESC

我需要在接受IQueryable<T>PagedList方法中使用此数据,并且我想将此SP转换为返回IQueryable的LINQ查询(内部PagedList方法使用.Skip().Skip() .Take()执行服务器端分页)。

以下是我到目前为止的尝试,但是我不知道为什么我无法像从SQL查询中那样获得预期的结果。 我认为下面的代码有些错误。 谁能在下面的代码中找出问题所在?

var model = (from sr in db.StudentRequests
            join r in db.Registrations on sr.RegistrationId equals r.RegistrationId
           join cc in db.Campus on r.CampusId equals cc.CampusId
           join c in db.Classes on sr.ClassId equals c.ClassId
           from tc in db.TutorClasses.Where(t => t.ClassId == sr.ClassId).DefaultIfEmpty()
           from srt in db.StudentRequestTimings.Where(s => s.StudentRequestId == sr.StudentRequestId).DefaultIfEmpty()
           from tsr in db.TutorStudentRequests.Where(t => t.StudentRequestId == srt.StudentRequestId && t.TutorId == registrationid).DefaultIfEmpty()
           where tc.RegistrationId == registrationid
            select new TutorDashboard
            {
             StudentRequestId = sr.StudentRequestId,
             RegistrationId = sr.RegistrationId,
             Location = sr.Location,
             PaymentMethod = sr.PaymentMethod,
             CreatedOn = sr.CreatedOn,
             ClassName = c.ClassName,
             CampusName = cc.CampusName,
             Time = string.Join(",", db.StudentRequestTimings.Where(p => p.StudentRequestId == sr.StudentRequestId).Select(p => p.FromTime.ToString().Replace("AM", "").Replace("PM", "") + "-" + p.ToTime.ToString())),
          }).Distinct();

有人可以帮我解决为什么我无法从上述linq查询中得到正确的结果吗?

问题是在将以下代码添加到Linq时,我遇到了问题,如何解决此问题?

Time = string.Join(",", db.StudentRequestTimings.Where(p => p.StudentRequestId == sr.StudentRequestId).Select(p => p.FromTime.ToString().Replace("AM", "").Replace("PM", "") + "-" + p.ToTime.ToString())),

我添加此代码是因为我想从多行中获取一个字符串

1:00-1:30 PM, 2:00=2:30 PM
5:00-5:30 PM

像明智的

由于转换逗号分隔的代码时出现问题,我在下面的代码中实现了

var query = (from sr in db.StudentRequests
             join r in db.Registrations on sr.RegistrationId equals r.RegistrationId
             join cc in db.Campus on r.CampusId equals cc.CampusId
             join c in db.Classes on sr.ClassId equals c.ClassId
             from tc in db.TutorClasses.Where(t => t.ClassId == sr.ClassId).DefaultIfEmpty()
             from srt in db.StudentRequestTimings.Where(s => s.StudentRequestId == sr.StudentRequestId).DefaultIfEmpty()
             from tsr in db.TutorStudentRequests.Where(t => t.StudentRequestId == srt.StudentRequestId && t.TutorId == registrationid).DefaultIfEmpty()
             where tc.RegistrationId == registrationid
             select new
             {
               StudentRequestId = sr.StudentRequestId,
               RegistrationId = sr.RegistrationId,
               Location = sr.Location,
               PaymentMethod = sr.PaymentMethod,
               CreatedOn = sr.CreatedOn,
               ClassName = c.ClassName,
               CampusName = cc.CampusName,
               StatusId = tsr.StatusId == null ? 1 : tsr.StatusId,
               Time = db.StudentRequestTimings.Where(p => p.StudentRequestId == sr.StudentRequestId).Select(p => p.FromTime.ToString().Replace("AM", "").Replace("PM", "") + "-" + p.ToTime)
               }).ToList().GroupBy(p => new { p.StudentRequestId }).Select(g => g.First()).ToList();


          var model = query.AsEnumerable().Select(x => new TutorDashboard
           {
              StudentRequestId = x.StudentRequestId,
              RegistrationId = x.RegistrationId,
              Location = x.Location,
              PaymentMethod = x.PaymentMethod,
              CreatedOn = x.CreatedOn,
              ClassName = x.ClassName,
              CampusName = x.CampusName,
              StatusId = x.StatusId == null ? 1 : x.StatusId,
              Time = string.Join(",", x.Time),
               }).ToList().ToPagedList(page ?? 1, 1);

可能对于某些需要用逗号分隔值并带有多个左连接的人来说,这段代码会有所帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM