Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.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# 实体框架-对字符串进行排序会导致;“等待操作超时”;_C#_Sql_Entity Framework_Linq - Fatal编程技术网

C# 实体框架-对字符串进行排序会导致;“等待操作超时”;

C# 实体框架-对字符串进行排序会导致;“等待操作超时”;,c#,sql,entity-framework,linq,C#,Sql,Entity Framework,Linq,当我使用按Name排序时,我有一个导致“等待操作超时”的查询。我怎样才能使它更快?Foods表中有8.5k行 Expression<Func<Food, string>> byName = x => x.FoodTranslations.FirstOrDefault(y => y.Language.Code == CultureInfo.CurrentUICulture.Name).Name; Expression<Func<Food, strin

当我使用按
Name
排序时,我有一个导致“等待操作超时”的查询。我怎样才能使它更快?
Foods
表中有8.5k行

Expression<Func<Food, string>> byName = x => x.FoodTranslations.FirstOrDefault(y => y.Language.Code == CultureInfo.CurrentUICulture.Name).Name;
Expression<Func<Food, string>> byUdsa = x => x.Udsa;

var query = this.DbContext.Foods
            .Where(x => category == null || x.FoodTypeId == category)
            .Where(x => (string.IsNullOrEmpty(name) || x.FoodTranslations.FirstOrDefault(y=>CultureInfo.CurrentUICulture.Name == y.Language.Code).Name.Contains(name)));

        switch (order)
        {
            case 1:
                query = query.OrderBy(byUdsa);
                break;
            default:
                query = query.OrderBy(byName);
                break;
        }

        var result = new JsonFoodIndexResult();
        result.Foods = query.Skip(start)
            .Take(size)
            .Select(x => new JsonFoodIndex
            {
                Name = x.FoodTranslations.FirstOrDefault(y => y.Language.Code == CultureInfo.CurrentUICulture.Name).Name,
                Id = x.Id,
                Udsa = x.Udsa,
                Category = x.FoodType.FoodTypeTranslations.FirstOrDefault(y => y.Language.Code == CultureInfo.CurrentUICulture.Name).Name
            }).ToList();
Expression byName=x=>x.FoodTranslations.FirstOrDefault(y=>y.Language.code==CultureInfo.CurrentUICulture.Name).Name;
表达式byUdsa=x=>x.Udsa;
var query=this.DbContext.Foods
.Where(x=>category==null | | x.FoodTypeId==category)
.Where(x=>(string.IsNullOrEmpty(name)| | x.FoodTranslations.FirstOrDefault(y=>CultureInfo.CurrentUICulture.name==y.Language.Code).name.Contains(name));
开关(命令)
{
案例1:
query=query.OrderBy(byUdsa);
打破
违约:
query=query.OrderBy(按名称);
打破
}
var result=新的JsonFoodIndexResult();
result.Foods=query.Skip(开始)
.拿(尺码)
.Select(x=>newjsonfoodindex
{
Name=x.FoodTranslations.FirstOrDefault(y=>y.Language.Code==CultureInfo.CurrentUICulture.Name),
Id=x.Id,
Udsa=x.Udsa,
Category=x.FoodType.FoodTypeTranslations.FirstOrDefault(y=>y.Language.Code==CultureInfo.CurrentUICulture.Name).Name
}).ToList();
试试看

query = query.AsNoTracking().OrderBy(byName);
Entity framework创建代理对象来跟踪每次检索到的记录的更改&此创建需要大量时间。由于在检索时,我们不需要跟踪,因此您可以将其设置为关闭,如上所示