c# - 多对多关系过滤器/搜索
问题描述
您好,我想过滤到 LanguageSchool 表,但 LanguageSchool 表与 LanguageSchoolProgram 表有关系(多对多)。
public class LanguageSchool
{
public virtual List<LanguageSchoolLanguageSchoolProgram> LanguageSchoolLanguageSchoolPrograms { get; set; }
}
public class LanguageSchoolProgram
{
public long Id { get; set; }
public virtual List<LanguageSchoolLanguageSchoolProgram> LanguageSchoolLanguageSchoolPrograms { get; set; }
}
public class LanguageSchoolLanguageSchoolProgram
{
public long LanguageSchoolProgramId { get; set; }
public virtual LanguageSchoolProgram LanguageSchoolProgram { get; set; }
public long LanguageSchoolId { get; set; }
public virtual LanguageSchool LanguageSchool { get; set; }
}
我有 X 语言学校计划、Y 语言学校计划和 Z 语言计划以及很多语言学校。
我想选择语言学校,但语言学校包含 X 和 Y 程序。
我必须使用.AsQueryable()
功能。
解决方案
您的问题不清楚...我不确定您如何存储程序 X、Y、Z?我假设这些是程序名称。
您可以像这样定义多对多关系:
public class LanguageSchool
{
public int LanguageSchoolId { get; set; }
public virtual ICollection<LanguageSchoolProgram> LanguageSchoolPrograms { get; set; }
}
public class LanguageSchoolProgram
{
public int LanguageSchoolProgramId { get; set; }
public string ProgramName {get; set;} // this is X, Y or Z
public virtual ICollection<LanguageSchool> LanguageSchools { get; set; }
}
并用于Contains
选择列表中包含课程的学校:
string[] requiredPrograms = new string[] {"X", "Y", "X"};
var schoolsQueryable = dbContext.LanguageSchool.Where(
ls => requiredPrograms.contains(ls.LanguageSchoolProgram.ProgramName));
// if you don't want Queryable, then add ToList()
推荐阅读
- python - TypeError:需要一个类似字节的对象,而不是'str'我如何从str转到字节
- sql - 识别userId是否在sql中的字符串末尾包含数字
- javascript - REACT NATIVE - 使用自定义组件在应用屏幕上触发模式
- python - 我应该如何绘制 XYZ 数据点以在 python 中创建 RGB 深度图像
- reactjs - 如果导航到新路径,则更改 React 状态
- java - Android/Java 应用程序 - 如何正确调用片段中的活动函数?
- input - Snakemake:{input:q} 不返回带引号的输入
- javascript - Javascript 正则表达式 matchAll:为什么需要休息运算符?
- java - 无法在netbeans 12.1中打开任何文件
- javascript - 如何在 catch 子句中显示多个错误