C# 多列表比较与单列表Linq查询
我有三节课C# 多列表比较与单列表Linq查询,c#,sql,linq,C#,Sql,Linq,我有三节课 class students { int age string name List<Courses> Courses } class Courses { int courses_id string Name } class Subject_Name { string Name } 任何人都可以寻求帮助。您需要执行以下操作: string[] subject_names = {"subject1" , "subject2"}; var
class students
{
int age
string name
List<Courses> Courses
}
class Courses
{
int courses_id
string Name
}
class Subject_Name
{
string Name
}
任何人都可以寻求帮助。您需要执行以下操作:
string[] subject_names = {"subject1" , "subject2"};
var result = students_table
.Where(s => s.Courses.Any(c => subject_names.Contains(c.Name)))
.ToList();
您需要执行以下操作:
string[] subject_names = {"subject1" , "subject2"};
var result = students_table
.Where(s => s.Courses.Any(c => subject_names.Contains(c.Name)))
.ToList();
试试这个:
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqAnswer
{
public class Student
{
public int Age { get; set; }
public string Name { get; set; }
public List<Course> Courses { get; set; } = new List<Course>();
public void AddCourse(Course course)
{
Courses.Add(course);
}
}
public class Course
{
public int Id { get; set; }
public string Name { get; set; }
public List<Subject> Subjects { get; set; } = new List<Subject>();
public void AddSubject(Subject subject)
{
Subjects.Add(subject);
}
}
public class Subject
{
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
var students = new List<Student>
{
new Student { Age = 18, Name = "A" },
new Student { Age = 19, Name = "B" },
new Student { Age = 21, Name = "C" },
new Student { Age = 22, Name = "D" },
new Student { Age = 20, Name = "E" }
};
var courses = new List<Course>
{
new Course { Id = 1, Name = "C1" },
new Course { Id = 2, Name = "C2" },
new Course { Id = 3, Name = "C3" },
new Course { Id = 4, Name = "C4" }
};
var subjects = new List<Subject>
{
new Subject { Name = "S1" },
new Subject { Name = "S2" },
new Subject { Name = "S3" }
};
students[0].AddCourse(courses[0]);
students[0].AddCourse(courses[2]);
students[1].AddCourse(courses[3]);
students[2].AddCourse(courses[0]);
students[2].AddCourse(courses[3]);
students[3].AddCourse(courses[2]);
students[4].AddCourse(courses[1]);
courses[0].AddSubject(subjects[0]);
courses[0].AddSubject(subjects[1]);
courses[1].AddSubject(subjects[0]);
courses[2].AddSubject(subjects[1]);
courses[2].AddSubject(subjects[2]);
courses[3].AddSubject(subjects[2]);
var studentsWithSubjectS2 = from student in students
from course in student.Courses
where course.Subjects.IndexOf(subjects[2]) >= 0
select student;
foreach(var studentWithSubjectS2 in studentsWithSubjectS2)
{
Console.WriteLine($"{studentWithSubjectS2.Name}, Age={studentWithSubjectS2.Age}");
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
名称空间LinqAnswer
{
公立班学生
{
公共整数{get;set;}
公共字符串名称{get;set;}
公共列表课程{get;set;}=new List();
公共课程(课程)
{
课程。添加(课程);
}
}
公共课
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表主题{get;set;}=new List();
公共科目(科目)
{
主题。添加(主题);
}
}
公共课科目
{
公共字符串名称{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
var students=新列表
{
新学生{Age=18,Name=“A”},
新生{Age=19,Name=“B”},
新学生{Age=21,Name=“C”},
新学生{Age=22,Name=“D”},
新学生{Age=20,Name=“E”}
};
var课程=新列表
{
新课程{Id=1,Name=“C1”},
新课程{Id=2,Name=“C2”},
新课程{Id=3,Name=“C3”},
新课程{Id=4,Name=“C4”}
};
var主题=新列表
{
新主题{Name=“S1”},
新主题{Name=“S2”},
新主题{Name=“S3”}
};
学生[0]。添加课程(课程[0]);
学生[0]。添加课程(课程[2]);
学生[1]。增加课程(课程[3]);
学生[2]。添加课程(课程[0]);
学生[2]。增加课程(课程[3]);
学生[3]。增加课程(课程[2]);
学生[4]。增加课程(课程[1]);
课程[0]。添加科目(科目[0]);
课程[0]。添加科目(科目[1]);
课程[1]。添加科目(科目[0]);
课程[2]。增加科目(科目[1]);
课程[2]。增加科目(科目[2]);
课程[3]。增加科目(科目[2]);
var studentsWithSubjectS2=来自学生中的学生
从学生的课程。课程
其中course.Subjects.IndexOf(Subjects[2])>=0
选择学生;
foreach(var Students,在Students中包含Subjects 2,在Students中包含Subjects 2)
{
WriteLine($“{studentWithSubjectS2.Name},Age={studentWithSubjectS2.Age}”);
}
}
}
}
试试这个:
using System;
using System.Collections.Generic;
using System.Linq;
namespace LinqAnswer
{
public class Student
{
public int Age { get; set; }
public string Name { get; set; }
public List<Course> Courses { get; set; } = new List<Course>();
public void AddCourse(Course course)
{
Courses.Add(course);
}
}
public class Course
{
public int Id { get; set; }
public string Name { get; set; }
public List<Subject> Subjects { get; set; } = new List<Subject>();
public void AddSubject(Subject subject)
{
Subjects.Add(subject);
}
}
public class Subject
{
public string Name { get; set; }
}
class Program
{
static void Main(string[] args)
{
var students = new List<Student>
{
new Student { Age = 18, Name = "A" },
new Student { Age = 19, Name = "B" },
new Student { Age = 21, Name = "C" },
new Student { Age = 22, Name = "D" },
new Student { Age = 20, Name = "E" }
};
var courses = new List<Course>
{
new Course { Id = 1, Name = "C1" },
new Course { Id = 2, Name = "C2" },
new Course { Id = 3, Name = "C3" },
new Course { Id = 4, Name = "C4" }
};
var subjects = new List<Subject>
{
new Subject { Name = "S1" },
new Subject { Name = "S2" },
new Subject { Name = "S3" }
};
students[0].AddCourse(courses[0]);
students[0].AddCourse(courses[2]);
students[1].AddCourse(courses[3]);
students[2].AddCourse(courses[0]);
students[2].AddCourse(courses[3]);
students[3].AddCourse(courses[2]);
students[4].AddCourse(courses[1]);
courses[0].AddSubject(subjects[0]);
courses[0].AddSubject(subjects[1]);
courses[1].AddSubject(subjects[0]);
courses[2].AddSubject(subjects[1]);
courses[2].AddSubject(subjects[2]);
courses[3].AddSubject(subjects[2]);
var studentsWithSubjectS2 = from student in students
from course in student.Courses
where course.Subjects.IndexOf(subjects[2]) >= 0
select student;
foreach(var studentWithSubjectS2 in studentsWithSubjectS2)
{
Console.WriteLine($"{studentWithSubjectS2.Name}, Age={studentWithSubjectS2.Age}");
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
名称空间LinqAnswer
{
公立班学生
{
公共整数{get;set;}
公共字符串名称{get;set;}
公共列表课程{get;set;}=new List();
公共课程(课程)
{
课程。添加(课程);
}
}
公共课
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表主题{get;set;}=new List();
公共科目(科目)
{
主题。添加(主题);
}
}
公共课科目
{
公共字符串名称{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
var students=新列表
{
新学生{Age=18,Name=“A”},
新生{Age=19,Name=“B”},
新学生{Age=21,Name=“C”},
新学生{Age=22,Name=“D”},
新学生{Age=20,Name=“E”}
};
var课程=新列表
{
新课程{Id=1,Name=“C1”},
新课程{Id=2,Name=“C2”},
新课程{Id=3,Name=“C3”},
新课程{Id=4,Name=“C4”}
};
var主题=新列表
{
新主题{Name=“S1”},
新主题{Name=“S2”},
新主题{Name=“S3”}
};
学生[0]。添加课程(课程[0]);
学生[0]。添加课程(课程[2]);
学生[1]。增加课程(课程[3]);
学生[2]。添加课程(课程[0]);
学生[2]。增加课程(课程[3]);
学生[3]。增加课程(课程[2]);
学生[4]。增加课程(课程[1]);
课程[0]。添加科目(科目[0]);
课程[0]。添加科目(科目[1]);
课程[1]。添加科目(科目[0]);
课程[2]。增加科目(科目[1]);
课程[2]。增加科目(科目[2]);
课程[3]。增加科目(科目[2]);
var studentsWithSubjectS2=来自学生中的学生
从学生的课程。课程
其中course.Subjects.IndexOf(Subjects[2])>=0
选择学生;
foreach(var Students,在Students中包含Subjects 2,在Students中包含Subjects 2)
{
WriteLine($“{studentWithSubjectS2.Name},Age={studentWithSubjectS2.Age}”);
}
}
}
}
假设EntityFramework并为Student
提供一个StudentId
属性,下面是我的$0.02尝试:
IList<int> studentIds = (from student in _context.Students
from cource in
student.Courses.Where(cource => _context.Subjects.Select(p => p.Name).ToList().Contains(cource.Name))
select student.StudentId).ToList();
IQueryable<Student> selected = _context.Students.Where(p => studentIds.Distinct().Contains(p.StudentId));
IList studentId=(来自_context.Students中的student
从库尔斯
student.Courses.Where(cource=>_context.Subjects.Select(p=>p.Name).ToList()包含(cource.Name))