1

このクエリに似た何かを実行するために、これら 2 つのクラスでコード ファースト ナビゲーション プロパティを定義する方法を見つけようとしています。

SELECT USERID, FIRSTNAME, LASTNAME, COURSEID, NAME
FROM User
LEFT OUTER JOIN Course ON User.USERID = Course.USERID
WHERE COURSEID = 1

そのため、特定のコースに参加したことがあるかどうかと一緒に、ユーザーのリストを見つけようとしています。

public class User
{
    public int UserId {get;set; }

    public string FirstName {get;set;}

    public string LastName {get;set;}

    public virtual ICollection<Course> Courses { get; set; }
}

public class Course 
{
    public int CourseId { get;set; }

    public int UserId { get;set; }

    public string Name { get;set; }

    public virtual User User {get;set;}
}

これを達成するためにクエリを書くとしたら

var u = Users.Where(x => x.Courses.Any(x => x.CourseId = 1));

これはサブクエリを実行しますが、これは私が望んでいたものではありません (コースに参加しなかった人は表示されないため)。

ナビゲーション プロパティはどのように定義されますか?

HasMany(t => t.Courses).WithOptional(t => t.User).HasForeignKey(t => t.UserId);
4

2 に答える 2

0

このリンクを確認してください:

http://msdn.microsoft.com/en-us/library/vstudio/bb397895.aspx

LINQ の左外部結合は、DefaultIfEmpty メソッドを介して行われます。

于 2013-09-12T05:20:32.983 に答える
0
 var u = Users.Select ( x => new {
        User = x,
        AttendedCourse = x.Courses.Any()
 } );

特定のコースIDについては、

var u = Users.Select ( x => new {
        User = x,
        AttendedCourse = x.Courses.Any( c => c.CourseID == 1 )
 } );

サブクエリは、関連するクエリを作成する唯一の方法ですが、EF は最適な結合の種類を選択し、正しい結果を提供します。また、EF は、結合を行わなくても、ほぼすべての種類のクエリを管理できます。

于 2013-09-12T07:51:57.250 に答える