1
var CCEScholasticTests = db.CCEScholasticTests.Where(x => x.CCEvaluationID == CCEValuationID && x.SubjectID == SubjectID && x.ClassID == ClassID && (x.BranchSectionID == BranchSectionID || BranchSectionID == 0) && x.languageTypeSubjectID == languageTypeSubjectID && (x.BranchID == BranchID || x.BranchID == 0) && x.IsOnlyGrade == false).Select(x => x).ToList();
var res = (from a in CCEScholasticTests
join b in db2.CCESubjectSkills on new { key1 = a.CCESubjectSkillID } equals new { key1 = b.CCESubjectSkillID } into join1
from joinRes in join1.DefaultIfEmpty(new CCESubjectSkill())
join c in db2.CCEScholasticSkillsMasters on new { key = joinRes.CCEScholasticSkillMasterID } equals new { key = c.CCEScholasticSkillMasterID } into join2
from joinRes2 in join2.DefaultIfEmpty(new CCEScholasticSkillsMaster())
select new EvaluationBluk
{
BranchSectionID = a.BranchSectionID,
CCEScholasticTestID = a.CCEScholasticTestID,
CCEScholasticTestName = a.CCEScholasticTestName,
//CCESubjectSkillName = joinRes.CCESubjectSkillName,
CCESubjectSkillID = a.CCESubjectSkillID,
CCEvaluationID = a.CCEvaluationID,
MaxMarks = a.MaxMarks,
SubjectID = a.SubjectID,
TestDate = a.TestDate,
MarksEntryLastDate = a.MarksEntryLastDate,
//CCEScholasticSkillMasterID = joinRes.CCEScholasticSkillMasterID,
//CCEScholasticSkillName = joinRes2.CCEScholasticSkillName
}).ToList();
如何寫多個左聯接在LINQ ..下面的LINQ查詢我正在基於此SP書面如何寫兩個左聯接在LINQ
CREATE procedure [dbo].[GetClassCCEScholasticTestsOnlyMarksTest]
(
@BranchSectionID int,
@CCEvaluationID int,
@SubjectID int,
@ClassID int ,
@languageTypeSubjectID int ,
@BranchID int
)
as
select c1.BranchSectionID,c1.CCEScholasticTestID,c1.CCEScholasticTestName,s1.CCESubjectSkillName,
c1.CCESubjectSkillID,c1.CCEvaluationID,c1.MaxMarks,c1.SubjectID,convert(varchar,c1.TestDate,101) as TestDate,convert(date,c1.MarksEntryLastDate,101)as MarksEntryLastDate
,isnull(s1.CCEScholasticSkillMasterID,-1) as CCEScholasticSkillMasterID ,cm.CCEScholasticSkillName
from dbo.CCEScholasticTests c1
left join CCESubjectSkills s1 on s1.CCESubjectSkillID=c1.CCESubjectSkillID
left join CCEScholasticSkillsMaster cm on cm.CCEScholasticSkillMasterID=s1.CCEScholasticSkillMasterID
where [email protected] and [email protected]
and [email protected] and ([email protected] or c1.BranchSectionID=0) and c1.languageTypeSubjectID [email protected]
and ([email protected] or c1.BranchID=0)and c1.IsOnlyGrade=0
order by c1.CCEScholasticTestID asc
在SQL它拋出3行,但在LINQ只投1列...什麼錯在我的代碼
應該是:從join1.DefaultIfEmpty(new CCESubjectSkill())中的b請參閱msdn:https://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9 – jdweng
*請勿*寫任何他們。 LINQ不是SQL的替代品。這是各種* ORM *使用的語言。定義對象之間的適當關係,僅加載根,並讓ORM加載所有相關對象。 –
如果最終使用JOIN,就好像它是SQL一樣,沒有理由使用LINQ。您幾乎失去了使用ORM的所有好處 –