[英]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.