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创建代理对象来跟踪每次检索到的记录的更改&此创建需要大量时间。由于在检索时,我们不需要跟踪,因此您可以将其设置为关闭,如上所示