簡體   English   中英

Linq-加入ID為!=的地方,選擇新的+不同的嗎?

[英]Linq - Join where ID's !=, select new + distinct?

我有以下課程。

課程;

 public class Course
{
    //pk
    public int Id{ get; set; }
    public int SourceCourseId { get; set; }
    public string Name { get; set; }
}

注冊

public class Registration
{
    //primary key
    public int Id { get; set; }
    //...more fields
    public int CourseId { get; set; }
}

我想獲取以下兩個字段的匿名對象的集合,這些字段用於不在課程表中的注冊表中與眾不同的所有課程。

var distinctCourses = (from registration in db.Registrations
                       join courses in db.Courses on registration.CourseId equals courses.SourceCourseId
                       where registration.CourseId != courses.SourceCourseId
                       select new
                            {
                                SourceCourseId = registration.CourseId,
                                Name = registration.CourseName,

                            }).Distinct().ToList();

由於某種原因,以上返回0 ...有什么建議嗎?

嘗試左聯接:

var query = from r in registrations
join c in courses on r.CourseId equals c.id into newCourses
from nullCourse in newCourses.DefaultIfEmpty()
where nullCourse == null
select new { }

編輯-根據Alex的評論:另外,您的where子句需要更改為

where nullCourse == null

編輯-更改了連接列,並添加了正確的where子句。

編輯-在CourseID上對注冊進行分組,這樣它們就可以不同

var distinctCourses = 
    (from registration in db.Registrations 
     group registration by registration.CourseId into grp
     from reg in grp
     join courses in db.Courses on reg.CourseId equals courses.SourceCourseId into newCourses
     from nullCourse in newCourses.DefaultIfEmpty()
     where nullCourse == null
     select new
     {
        SourceCourseId = reg.CourseId,
        Name = reg.CourseName,

     }).ToList();

嘗試這個

var result = Registrations.GroupJoin(Courses,r=>r.CourseId,c=>c.SourceCourseId,
                            (k,g) => new {k,g})
                            .Where(x=>x.g.Count()==0)
                            .Select(s=> new {id=s.k.CourseId,name=s.k.CourseName});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM