【发布时间】:2017-03-13 15:46:35
【问题描述】:
我是 MVC 和 EF 的新手。我正在遵循数据库优先方法。我的数据库中有 2 个名为 tblSubject 和 tblPrerequisite 的表。我使用 EF 将它们映射到我的应用程序。这是两个图表的图片:
select Sc from tblSubject where Sc not in (Select Prerequisite from tblPrerequisite where Sc = @subjectCode) and Sc != @subjectCode
这个查询应该检索所有尚未作为先决条件分配给我作为参数传递的主题的主题。第二个条件应该过滤掉主题本身——因为它满足第一个条件——。我需要知道如何使用 Lambda 表达式或理解语法来做到这一点。可以的话请帮忙
编辑:这是我映射的主题类的代码
public partial class Subject
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Subject()
{
this.tblSubjectScores = new HashSet<SubjectScore>();
this.Prerequisite = new HashSet<Subject>();
this.IsPrerequisiteFor = new HashSet<Subject>();
this.tblSubject_Program = new HashSet<Subject_Program>();
}
public string Sc { get; set; }
public string Name_EN { get; set; }
public string Name_AR { get; set; }
public byte CCH { get; set; }
public string Description { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<SubjectScore> tblSubjectScores { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Subject> Prerequisite { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Subject> IsPrerequisiteFor { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Subject_Program> tblSubject_Program { get; set; }
}
这是我用于测试的操作方法
public ActionResult Index()
{
Subject s = db.Subjects.FirstOrDefault(x => x.Sc == "Acc102");
var notYetAssigned = db.Subjects.Where(x => s.Prerequisite.Any(y=> y.Sc == s.Sc && y.Sc!=x.Sc) && x.Sc != s.Sc).ToList();
return View(notYetAssigned);
}
【问题讨论】:
标签: c# sql-server entity-framework lambda