上一个查询的索引结果上的LINQ给出错误“无法转换”

hi3rlvi2  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(92)

我试图在LINQ给我的结果集上添加一个索引,我成功地做到了。我不会深入讨论我为什么要做索引,因为主要原因是我所处理的数据具有冗余性,我需要处理它。
没有太多的进入LINQ,但我已经设法通过的问题陈述,我有。现在我有以下的疑问。
1.我是否正确地在记录上放置索引?
1.我需要对齐查询吗?我指的是我在查询中使用的 predicate 序列?
1.它似乎是整洁的查询,那么为什么它仍然给出错误:
无法转换。请以可以转换的形式重写查询,或者通过插入对“AsEnumerable”、“AsAsyncEnumerable”、“ToList”或“ToListAsync”的调用来显式切换到客户端计算。有关详细信息,请参见https://go.microsoft.com/fwlink/?linkid=2101038。
下面是我的疑问:

dbEmployees = await _dbContext.Employees
                                        .AsNoTracking()
                                        .OrderBy(x => x.EmployeeName)
                                        .ThenBy(x => x.EmployeeCode)
                                        .ThenBy(x => x.BadgeNumber)
                                        .ThenBy(x => x.StartDate)
                                        .ThenBy(x => x.SignOnTime)
                                        .Where(x => x.UnitCode == "BU" && x.DepartmentId == 1)
                                        .Select((item, employeeIndex) => new
                                        {
                                            EmployeeIndex = employeeIndex + 1,
                                            item
                                        })
                                        .Where(x => x.EmployeeIndex >= employeeIndexPointer)
                                        .Select(x => x.item)
                                        .Take(10)
                                        .ToListAsync();

欢迎任何帮助或指点。

uqcuzwp8

uqcuzwp81#

如果在IEnumerable<T>上操作,则需要使用LINQ to Object(而不是LINQ to SQL)
请注意.Where()语句前面的.AsEnumerable(),这会将结果集从IQueryable<T>转换为IEnumerable<T>

var dbEmployees = await _dbContext.Employees
    .AsNoTracking()
    .OrderBy(x => x.EmployeeName)
    .ThenBy(x => x.EmployeeCode)
    .ThenBy(x => x.BadgeNumber)
    .ThenBy(x => x.StartDate)
    .ThenBy(x => x.SignOnTime)
    .AsEnumerable()
    .Where(x => x.UnitCode == "BU" && x.DepartmentId == 1)
    .Select((item, employeeIndex) => new
    {
        EmployeeIndex = employeeIndex + 1,
        item
        })
    .Where(x => x.EmployeeIndex >= employeeIndexPointer)
    .Select(x => x.item)
    .Take(10)
    .ToListAsync();

在此阅读更多信息:Are Linq to SQL and Linq to Objects queries the same?

相关问题