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