Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.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 To Sql - Fatal编程技术网

C# 如何优化linq查询?

C# 如何优化linq查询?,c#,linq-to-sql,C#,Linq To Sql,我很难得到每个系学生的平均分数。 虽然每个系都有很多学院,每个学院都有很多课程,每个课程都有很多学生,每个学生都有很多价值。 通过我所做的查询,我得到了显示相同数据捕获所需的大量时间限制。 请帮助优化我提出的查询 double TotalNilaiMutu = 0; double JumSKS = 0; double ipkMhs = 0; double totalIPK = 0; var queryDepartemen = (from so in StrukturOrganisasis

我很难得到每个系学生的平均分数。 虽然每个系都有很多学院,每个学院都有很多课程,每个课程都有很多学生,每个学生都有很多价值。 通过我所做的查询,我得到了显示相同数据捕获所需的大量时间限制。 请帮助优化我提出的查询

double TotalNilaiMutu = 0;
double JumSKS = 0;
double ipkMhs = 0;
double totalIPK = 0;

var queryDepartemen = (from so in StrukturOrganisasis
                        join dp in Departemens on so.ID equals dp.ID
                        orderby dp.ID
                        select new{dp.ID, so.Inisial, so.Nama}).ToList();

foreach(var departemen in queryDepartemen){
    var queryMayor = (from my in Mayors
                        where my.DepartemenID == departemen.ID && my.StrataID == 2
                        select my.ID).ToList();

    var queryMhs = (from ms in MahasiswaSarjanas
                    where queryMayor.Contains(ms.MayorID) &&
                        (
                            from sm in StatusMahasiswas
                            where
                                (
                                    from ts in TahunSemesters
                                    where ts.TahunAwal == 2013
                                    select ts.ID
                                )
                            .Contains(sm.TahunSemesterID)
                            select sm.NIM
                        )
                    .Contains(ms.NIM)
                    select ms.NIM).ToList();

    ipkMhs = 0;

    foreach(var nim in queryMhs){
        var queryNilai = (from kr in KRS 
                            join hm in HurufMutus on kr.HurufMutuID equals hm.ID
                            join kur in 
                                (
                                    from ku in Kurikulums
                                    join mk in MataKuliahs on ku.MataKuliahID equals mk.ID 
                                    select new {ku.ID, mk.Nama, mk.SKS}
                                ) 
                            on kr.KurikulumID equals kur.ID
                            where kr.NIM==nim
                            select new {
                                nilai = hm.NilaiMutu * kur.SKS,
                                sks   = kur.SKS
                            });

        TotalNilaiMutu = 0;
        JumSKS = 0;
        foreach(var ipk in queryNilai){
            TotalNilaiMutu += ipk.nilai;
            JumSKS += ipk.sks;
        }

        if(double.IsNaN(TotalNilaiMutu/JumSKS)) ipkMhs+=0;
        else ipkMhs += TotalNilaiMutu/JumSKS;

    }
    if(double.IsNaN(ipkMhs/queryMhs.Count())) totalIPK=0;
    else totalIPK=ipkMhs/queryMhs.Count();

    Console.WriteLine(departemen.Nama +" -> "+ totalIPK +" : "+ ipkMhs +" / "+queryMhs.Count());
}

你试过添加阿斯巴利尔吗

     var queryDepartemen = (from so in StrukturOrganisasis.AsParallel()
                    join dp in Departemens on so.ID equals dp.ID
                    orderby dp.ID
                    select new{dp.ID, so.Inisial, so.Nama}).ToList();

  foreach(var departemen in queryDepartemen.AsParallel()){
                    var queryMayor = (from my in Mayors
                    where my.DepartemenID == departemen.ID && my.StrataID == 2
                    select my.ID).ToList();

var queryMhs = (from ms in MahasiswaSarjanas.AsParallel()
                where queryMayor.Contains(ms.MayorID) &&
                    (
                        from sm in StatusMahasiswas
                        where
                            (
                                from ts in TahunSemesters
                                where ts.TahunAwal == 2013
                                select ts.ID
                            )
                        .Contains(sm.TahunSemesterID)
                        select sm.NIM
                    )
                .Contains(ms.NIM)
                select ms.NIM).ToList();

我认为问题是,你没有一个问题。您在循环中多次命中SQL,这很可能不是一个好主意。在我尝试之后,出现了如下错误:NotSupportedException:二进制运算符的第二个数据源必须是System.Linq.ParallelQuery类型,而不是System.Collections.Generic.IEnumerable类型。要解决此问题,请使用AsParallel扩展方法将正确的数据源转换为System.Linq.ParallelQuery。联机:QueryDepartmen var=来自组织器官增生症中的so。AsParallel组织器官增生症是什么类型