Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.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# 需要帮助使用ASP.NET Core优化LINQ查询吗_C#_Linq To Sql_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# 需要帮助使用ASP.NET Core优化LINQ查询吗

C# 需要帮助使用ASP.NET Core优化LINQ查询吗,c#,linq-to-sql,asp.net-core,asp.net-core-mvc,C#,Linq To Sql,Asp.net Core,Asp.net Core Mvc,我正在开发一个ASP.NET核心MVC应用程序,我需要一些帮助来优化我的LINQ查询。目前,我的应用程序运行非常缓慢,我认为这是由于我编写查询的方式造成的。我的SQL db包含大约190万行数据,每个数据项有4个属性 这是我在控制器中的一个示例 model.MostPopular = await _givenNameRepo.GetByAlphaSinceYear(model.StartsWith, model.Gender, model.SortCount, model.SinceYear).

我正在开发一个ASP.NET核心MVC应用程序,我需要一些帮助来优化我的LINQ查询。目前,我的应用程序运行非常缓慢,我认为这是由于我编写查询的方式造成的。我的SQL db包含大约190万行数据,每个数据项有4个属性

这是我在控制器中的一个示例

model.MostPopular = await _givenNameRepo.GetByAlphaSinceYear(model.StartsWith, model.Gender, model.SortCount, model.SinceYear).ToAsyncEnumerable().ToList();
这是我在回购协议中得到的

public IEnumerable<string> GetByAlphaSinceYear(string alpha, string gender, int sortCount, int sinceYear)
    {
        var names = (from n in _context.AsNoTracking()
                     where n.Name.StartsWith(alpha) && n.Gender == gender && n.Year >= sinceYear
                     group n by new { n.Name } into nn
                     select new
                     {
                         nn.Key.Name,
                         Frequency = nn.Sum(s => s.Frequency)
                     }).OrderByDescending(i => i.Frequency)
                       .Select(j => j.Name).Take(sortCount);

        return names;
    }

每年都有自己的名字,有自己的性别和频率。示例查询通过将一些年份(去年、过去5年、过去10年等)中的姓名频率和性别(姓名可能是男性和女性)进行汇总,然后根据这些汇总频率按降序排序,来查找最流行的姓名。然后从顶部选择要显示的任何数字,以显示最流行的名称。

这更像是SQL server端的索引问题。你有这三列的索引吗?没有更多的信息很难帮助你。至少提供一个表架构和/或该表上的索引集。在非索引字段上搜索可能会导致除上述信息外的完整或部分表扫描-看看这个LINQ查询实际生成的sql查询。Jeff,如果您正在处理一个有数百万行的表,您最好尽快熟悉索引,我的朋友…:-)你为什么按名字分组?名字不应该是唯一的吗?
Id | Year | Name | Gender | Frequency