MVC EF——内部连接

MVC EF - Inner Join

我检查了可能已经有了我的答案的问题,但似乎 none 解决了我遇到的问题:

var semesters = db.Semesters.Where(e => e.ID == semester).ToList();
var semestersbyfaculty = db.SemestersByFaculty.Where(e => e.FacultyID == id).ToList();

如何在内部加入这两个查询,就像我在 SQL 中执行以下操作一样:

SELECT 
   Fac.*, Sem.SemesterText
FROM 
   SemestersByFaculty AS Fac
INNER JOIN
   Semesters AS Sem
ON
   Fac.SemesterID = Sem.ID
WHERE id
   Fac.FacultyID = id

Inner Join

以下示例显示了一个简单的内部等值连接。

var query = from fac in db.SemesterByFaculty
            join sem in db.Semester on fac.SemesterID equals sem.ID
            where fac.FacultyID == id
            select new { Faculty = fac, SemesterText = sem.SemesterText };

有关详细信息,请参阅 How to: Perform Inner Joins (C# Programming Guide)

更新:

来自评论

型号

class MyModel {
    public MitModel.SemestersByFacul‌​ty Faculty{ get; set; }
    public string SemesterText { get; set; }
}

class MyViewModel {
    public List<MyModel> SemesterFaculties { get; set; }
}

操作:

public ActionResult SomeAction(string id) {

    var query = from fac in db.SemesterByFaculty
                join sem in db.Semester on fac.SemesterID equals sem.ID
                where fac.FacultyID == id
                select new MyModel{ Faculty = fac, SemesterTest = sem.SemesterTest };

    var viewModel = new MyViewModel { SemesterFaculties = query.ToList() };
    return View(viewModel);
}

查看

@Model MyViewModel

假设您在 SemestersByFaculty

中有以下字段
class SemestersByFaculty
{
    string FacultyName;
    int FacultyID;
    int SemesterID;
}

注意:如果您在 SemestersByFaculty class 中有更多字段,那么您可以在下面的查询中将它们列在 new{} 中:

var query = semesters.Join(semestersbyfaculty,
                                sem => sem.ID,
                                fac => fac.SemesterID,
                                (sem, fac) =>
                                    new { facName = fac.FacultyName, facId = fac.FacultyID,semText = sem.SemesterText }).Where(e=> e.fac.FacultyId = id);

现在,你得到的是一个可枚举的。您可以遍历它并检索值。它将像:

foreach (var obj in query){

   Console.writeln("{0}-{1}-{2}",obj.facName,obj.facId,obj.semText);
}

这是使用非 LINQ 语法的解决方案。您还可以在将 'db.Semesters' 和 'db.SemestersByFaculty' 传递到 'join'.

之前对它们执行 'Where' 过滤器
var result = db.SemestersByFaculty
  .Where(
    x_ => x_.FacultyID == id)
  .Join(
    db.Semesters.Where(x_ => x_.ID == semester), 
    x_ => x_.SemesterID, 
    x_ => x_.ID, 
    (x_, y_) => new 
    { 
      FacultyID = x_.ID, 
      SemesterID = y_.SemesterID,
      Sem = y_.SemesterText 
    })
  .ToList();