Asp.net Core 5.0 Linq Take(1).ElementAt(索引)
Asp.net Core 5.0 Linq Take(1).ElementAt(index)
我有一个很长的 Linq
查询,我正试图在该查询的任何索引中获取一个数据。
我的查询是:
public IEnumerable<WebFairField> WebFairFieldForFair(Guid ID,int index)
{
return TradeTurkDBContext.WebFairField.Where(x => x.DataGuidID==ID)
.Include(x => x.Category)
.ThenInclude(x=>x.MainCategory).AsSplitQuery()
//
.Include(x=>x.FairSponsors)
.ThenInclude(x=>x.Company)
.ThenInclude(x=>x.FileRepos).AsSplitQuery()
//
.Include(x=>x.WebFairHalls.Take(1).ElementAt(index)) //Thats the point where i stuck*
.ThenInclude(x=>x.HallSeatingOrders)
.ThenInclude(x=>x.Company)
.ThenInclude(x=>x.FileRepos).AsSplitQuery()
//
.Include(x=>x.HallExpertComments).AsSplitQuery()
.Include(x=>x.Products).AsSplitQuery()
.Include(x=>x.FairSponsors).AsSplitQuery()
.AsNoTrackingWithIdentityResolution()
.ToList();
}
当我这样做时,它给我一个错误:Collection navigation access can be filtered by composing Where, OrderBy,ThenBy,Skip or Take operations.
我知道我必须对这些数据进行排序,但我不知道该怎么做。谁能告诉我应该如何对该查询的数据进行排序?
感谢任何建议!!
错误
正如你所提到的,
这一行
.Include(x=>x.WebFairHalls.Take(1).ElementAt(index)) //Thats the point where i stuck*
导致错误。基本上你 Take
第一个元素然后尝试调用 ElementAt. This is a problem technically, because you need to convert your collection to IEnumerable 以便能够调用 ElementAt
.
这也是一个逻辑错误,因为如果你只取一个元素,那么尝试为它调用 ElementAt
是没有意义的。
跳过
正如 Guru Strong 指出的那样,您可以跳过,如 Skip(index - 1).Take(1)
跳过第一个索引 - 1 个元素然后获取下一个,即索引的第一个元素。
排序
如需排序,调用OrderBy. If you need several sorting criteria, then use ThenBy。
我有一个很长的 Linq
查询,我正试图在该查询的任何索引中获取一个数据。
我的查询是:
public IEnumerable<WebFairField> WebFairFieldForFair(Guid ID,int index)
{
return TradeTurkDBContext.WebFairField.Where(x => x.DataGuidID==ID)
.Include(x => x.Category)
.ThenInclude(x=>x.MainCategory).AsSplitQuery()
//
.Include(x=>x.FairSponsors)
.ThenInclude(x=>x.Company)
.ThenInclude(x=>x.FileRepos).AsSplitQuery()
//
.Include(x=>x.WebFairHalls.Take(1).ElementAt(index)) //Thats the point where i stuck*
.ThenInclude(x=>x.HallSeatingOrders)
.ThenInclude(x=>x.Company)
.ThenInclude(x=>x.FileRepos).AsSplitQuery()
//
.Include(x=>x.HallExpertComments).AsSplitQuery()
.Include(x=>x.Products).AsSplitQuery()
.Include(x=>x.FairSponsors).AsSplitQuery()
.AsNoTrackingWithIdentityResolution()
.ToList();
}
当我这样做时,它给我一个错误:Collection navigation access can be filtered by composing Where, OrderBy,ThenBy,Skip or Take operations.
我知道我必须对这些数据进行排序,但我不知道该怎么做。谁能告诉我应该如何对该查询的数据进行排序?
感谢任何建议!!
错误
正如你所提到的,
这一行.Include(x=>x.WebFairHalls.Take(1).ElementAt(index)) //Thats the point where i stuck*
导致错误。基本上你 Take
第一个元素然后尝试调用 ElementAt. This is a problem technically, because you need to convert your collection to IEnumerable 以便能够调用 ElementAt
.
这也是一个逻辑错误,因为如果你只取一个元素,那么尝试为它调用 ElementAt
是没有意义的。
跳过
正如 Guru Strong 指出的那样,您可以跳过,如 Skip(index - 1).Take(1)
跳过第一个索引 - 1 个元素然后获取下一个,即索引的第一个元素。
排序
如需排序,调用OrderBy. If you need several sorting criteria, then use ThenBy。