Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 多列表比较与单列表Linq查询_C#_Sql_Linq - Fatal编程技术网

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))