2017-05-24 30 views
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列...什麼錯在我的代碼

+0

應該是:從join1.DefaultIfEmpty(new CCESubjectSkill())中的b請參閱msdn:https://code.msdn.microsoft.com/LINQ-Join-Operators-dabef4e9 – jdweng

+0

*請勿*寫任何他們。 LINQ不是SQL的替代品。這是各種* ORM *使用的語言。定義對象之間的適當關係,僅加載根,並讓ORM加載所有相關對象。 –

+0

如果最終使用JOIN,就好像它是SQL一樣,沒有理由使用LINQ。您幾乎失去了使用ORM的所有好處 –

回答

0
var result=CCEScholasticTests.join(db2.CCESubjectSkills ,o=>o.CCESubjectSkillID, od=>od.CCESubjectSkillID,(o, od)=> new 
    { 
         BranchSectionID = o.BranchSectionID, 
             CCEScholasticTestID = o.CCEScholasticTestID, 
             CCEScholasticTestName = o.CCEScholasticTestName, 
             CCESubjectSkillID = o.CCESubjectSkillID, 
             CCEvaluationID = o.CCEvaluationID, 
             MaxMarks = o.MaxMarks, 
             SubjectID = o.SubjectID, 
             TestDate = o.TestDate, 
             MarksEntryLastDate = o.MarksEntryLastDate, 
CCEScholasticSkillMasterID = od.CCEScholasticSkillMasterID 
    }).join(db2.CCEScholasticSkillsMasters, s=>s.CCEScholasticSkillMasterID = t.CCEScholasticSkillMasterID, t=>t.CCEScholasticSkillMasterID,(s,t)=> new 
    { 
         BranchSectionID = o.BranchSectionID, 
             CCEScholasticTestID = o.CCEScholasticTestID, 
             CCEScholasticTestName = o.CCEScholasticTestName, 
             CCESubjectSkillID = o.CCESubjectSkillID, 
             CCEvaluationID = o.CCEvaluationID, 
             MaxMarks = o.MaxMarks, 
             SubjectID = o.SubjectID, 
             TestDate = o.TestDate, 
             MarksEntryLastDate = o.MarksEntryLastDate, 
         CCESubjectSkillName = t.CCESubjectSkillName, 
         CCEScholasticSkillMasterID = t.CCEScholasticSkillMasterID, 
             CCEScholasticSkillName = t.CCEScholasticSkillName 
    }).tolist(); 

我不知道表之間的確切關係,但,我假設和書面查詢。希望它有幫助ü