Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.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#_Linq - Fatal编程技术网

C# 使用LINQ查询数据

C# 使用LINQ查询数据,c#,linq,C#,Linq,我询问了三次,以了解我需要什么,但我相信可能有更好/更聪明的方法 ObservableCollection<ReadingEquipmentViewModel> AllCourses; var allCourses = AllCourses.ToList(); for (int i = 0; i < allCourses.Count; i++) { if (allCourses[i].ClassType == CourseType.IsScience) {

我询问了三次,以了解我需要什么,但我相信可能有更好/更聪明的方法

ObservableCollection<ReadingEquipmentViewModel> AllCourses;

var allCourses = AllCourses.ToList();
for (int i = 0; i < allCourses.Count; i++)
{
     if (allCourses[i].ClassType == CourseType.IsScience)
     {
        var EnrollmentList = allCourses[i].Enrollments.ToList()
                                          .Where(x=>x.IsDone || x.IsProgress).ToList();
     }
}
observedcollection所有课程;
var allCourses=allCourses.ToList();
for(int i=0;ix.IsDone | | x.IsProgress).ToList();
}
}

首先,您可以使用
Where
仅过滤
ClassType==CourseType.IsScience
中的项目。然后,您可以使用
Select
为每个项目仅检索
已完成的
登记
正在进行的

var result = AllCourses.Where(c => c.ClassType == CourseType.IsScience)
                       .Select(c => new { 
                           Course = c, 
                           EnrollmentList = c.Enrollments.Where(x=>x.IsDone || x.IsProgress)
                        });
如果每个项目所需的都是首先用于内部的项目,那么:

var result = AllCourses.Where(c => c.ClassType == CourseType.IsScience)
                       .Select(c => c. Enrollments.Where(x=>x.IsDone || x.IsProgress));
作为旁注,关于所有的
ToList
-除非您想具体化查询中的项目,否则无需调用
ToList


正如@NetMage在评论中所建议的,如果您不需要在不同的课程之间进行分隔,只需要一个简单的
EnrollmentList
列表,那么使用
SelectMany
而不是
Select

var result = AllCourses.Where(c => c.ClassType == CourseType.IsScience)
                       .SelectMany(c => c. Enrollments.Where(x=>x.IsDone || x.IsProgress));

首先,您可以使用
Where
仅过滤
ClassType==CourseType.IsScience
中的项目。然后,您可以使用
Select
为每个项目仅检索
已完成的
登记
正在进行的

var result = AllCourses.Where(c => c.ClassType == CourseType.IsScience)
                       .Select(c => new { 
                           Course = c, 
                           EnrollmentList = c.Enrollments.Where(x=>x.IsDone || x.IsProgress)
                        });
如果每个项目所需的都是首先用于内部的项目,那么:

var result = AllCourses.Where(c => c.ClassType == CourseType.IsScience)
                       .Select(c => c. Enrollments.Where(x=>x.IsDone || x.IsProgress));
作为旁注,关于所有的
ToList
-除非您想具体化查询中的项目,否则无需调用
ToList


正如@NetMage在评论中所建议的,如果您不需要在不同的课程之间进行分隔,只需要一个简单的
EnrollmentList
列表,那么使用
SelectMany
而不是
Select

var result = AllCourses.Where(c => c.ClassType == CourseType.IsScience)
                       .SelectMany(c => c. Enrollments.Where(x=>x.IsDone || x.IsProgress));

试着做些类似的事情

var query = from course in allCourses
            from enrollment in course.Enrollments
            where course.ClassType == CourseType.IsScience
                && (enrollment.IsDone
                || enrollment.IsProgress)
            select enrollment;
var enrollments = query.ToList();

注意:在幕后处理IQueryable时,要小心
.ToList
,过早调用
.ToList
(如之前的where子句)可能会对代码造成严重的性能损失

尝试以下方法

var query = from course in allCourses
            from enrollment in course.Enrollments
            where course.ClassType == CourseType.IsScience
                && (enrollment.IsDone
                || enrollment.IsProgress)
            select enrollment;
var enrollments = query.ToList();

注意:在幕后处理IQueryable时要小心
.ToList
,过早调用
.ToList
(如之前的where子句)可能会对代码造成严重的性能损失
IQueryable
,避免对它们调用
ToList
。@DanielA.White我在我的实现中没有看到
ToString()
,我的意思是
ToList
@DanielA.White,那么我需要知道如何处理而不必接触列表。有什么建议或指导吗?你打算用
EnrollmentList
做什么?如果那些是
IQueryable
,不要打电话给
ToList
。@DanielA.White我在我的实现中没有看到
ToString()
。@DanielA.White我的意思是
ToList
,那么我需要知道如何处理而不需要接触列表。有什么建议或指导吗?你打算如何处理
注册列表
?也许在你的第二次查询中选择多个
会更好?@NetMage-hm。。。可能是。。我会补充一下。我以前没有写的原因是OP可能希望在不同的课程之间保持分离。
SelectMange
?Lola也许在第二次查询中选择Many会更好?@NetMage-hm。。。可能是。。我会补充一下。我以前没有写的原因是OP可能希望在不同的课程之间保持分离。
SelectMange
?英雄联盟