1

私はLinqtoEntity構文で次のLeftOuterJoin Scenerioを書き込もうとしていますが、それを実現する方法を正確に理解することはできません...これ が最終的に達成しようとしている実用的なSQLです。

SELECT *
FROM Student s LEFT JOIN ParentStudents ps ON ps.StudentId = s.StudentId AND ps.ParentId = '6D279F72-2623-459F-B701-5C77C52BA52F'

WHERE s.TenantId = 3 AND s.FamilyId = '28833312-46eb-4a54-9132-8a7c8037cec5'

太字で強調表示されている部分は、私が倒れる場所です...データベースにParentStudentレコードがあるかどうかに関係なく、生徒に戻ってもらいたいです。

これが機能しない私の最新のLINQtoEntityコードです:

    public ICollection<ParentStudentListing> GetParentStudents(Guid FamilyId, Guid ParentId)
    {
        var query = from s in DataContext.Students
                    from ps in s.ParentStudents.DefaultIfEmpty()
                    where s.TenantId == CurrentUser.TenantId && s.FamilyId == FamilyId && ps.ParentId == ParentId
                    select new ParentStudentListing { StudentId = s.StudentId, FirstName = s.FirstName, MiddleName = s.MiddleName, LastName = s.LastName, RelationshipId = ps.RelationshipId, ParentStudentId = ps.ParentStudentId, isAllowedToPickUp = ps.isAllowedToPickUp, isEmergency = ps.isEmergency, isLiveIn = ps.isLiveIn, ParentId = ps.ParentId };

        return query.ToList();
    }

このコードは、意図した結果ではないParentStudentレコードがデータベースにない限り、生徒を呼び戻しません。ParentStudentレコードがあるかどうかに関係なく、生徒を呼び戻したいのですが、ParentStudentレコードがある場合は、それらをStudentレコードと結合してほしいです...

ありがとう!

4

2 に答える 2

0

LINQ結合での最初の試みは次のとおりです。

var query = from s in DataContext.Students
            join ps in s.ParentStudents on ps.ParentId equals s.ParentId into ps
            from ps in ps.DefaultIfEmpty()
            where s.TenantId == CurrentUser.TenantId && s.FamilyId == FamilyId                
            select new ParentStudentListing { StudentId = s.StudentId, FirstName = s.FirstName, MiddleName = s.MiddleName, LastName = s.LastName, RelationshipId = ps.RelationshipId, ParentStudentId = ps.ParentStudentId, isAllowedToPickUp = ps.isAllowedToPickUp, isEmergency = ps.isEmergency, isLiveIn = ps.isLiveIn, ParentId = ps.ParentId };

ここから参照。

于 2012-09-08T12:34:54.257 に答える
0

追加されたヘルプを提供してくれたJoeに感謝します....それではうまくいきませんでしたが、ようやく実行できました。動作するコードは次のとおりです。

    public ICollection<ParentStudentListing> GetParentStudents(Guid FamilyId, Guid ParentId)
    {
        var query = from s in DataContext.Students
                    join ps in DataContext.ParentStudents
                          on new { s.StudentId, ParentId = ParentId }
                      equals new { ps.StudentId, ps.ParentId } into ps_join
                    from ps in ps_join.DefaultIfEmpty()
                    where s.TenantId == CurrentUser.TenantId && s.FamilyId == FamilyId
                    select new ParentStudentListing { StudentId = s.StudentId, FirstName = s.FirstName, MiddleName = s.MiddleName, LastName = s.LastName, RelationshipId = ps.RelationshipId, ParentStudentId = ps.ParentStudentId, isAllowedToPickUp = ps.isAllowedToPickUp, isEmergency = ps.isEmergency, isLiveIn = ps.isLiveIn, ParentId = ps.ParentId };

        return query.ToList();
    }
于 2012-09-08T20:16:47.277 に答える