LINQ表达式节点类型'ArrayIndex'在LINQ到实体中不支持

本文关键字:LINQ 实体 不支持 节点 表达式 ArrayIndex 类型 | 更新日期: 2023-09-27 18:08:37

 var residenceRep = 
     ctx.ShiftEmployees
        .Include(s => s.UserData.NAME)
        .Include(s => s.ResidenceShift.shiftName)
        .Join(ctx.calc,
              sh => new { sh.empNum, sh.dayDate },
              o => new { empNum = o.emp_num, dayDate = o.trans_date },
              (sh, o) => new { sh, o })
        .Where(s => s.sh.recordId == recordId && s.o.day_flag.Contains("R1"))
        .OrderBy(r => r.sh.dayDate)
        .Select(r => new
             {
                  dayDate = r.sh.dayDate,
                  empNum = r.sh.empNum,
                  empName = r.sh.UserData.NAME,
                  shiftId = r.sh.shiftId,
                  shiftName = r.sh.ResidenceShift.shiftName,
                  recordId,
                  dayState = r.o.day_desc.Split('[', ']')[1]
             }).ToList();

我得到一个异常:

LINQ to中不支持LINQ表达式节点类型'ArrayIndex'实体

如何在此查询中找到Split('[', ']')[1]的替代方案

LINQ表达式节点类型'ArrayIndex'在LINQ到实体中不支持

必须在加载数据后提交查询并进行拆分:

var residenceRep = 
 ctx.ShiftEmployees
    .Include(s => s.UserData.NAME)
    .Include(s => s.ResidenceShift.shiftName)
    .Join(ctx.calc,
          sh => new { sh.empNum, sh.dayDate },
          o => new { empNum = o.emp_num, dayDate = o.trans_date },
          (sh, o) => new { sh, o })
    .Where(s => s.sh.recordId == recordId && s.o.day_flag.Contains("R1"))
    .OrderBy(r => r.sh.dayDate)
    .Select(r => new
         {
              dayDate = r.sh.dayDate,
              empNum = r.sh.empNum,
              empName = r.sh.UserData.NAME,
              shiftId = r.sh.shiftId,
              shiftName = r.sh.ResidenceShift.shiftName,
              recordId = r.sh.recordId,
              dayState = r.o.day_desc,
         })
    .ToList()//Here we commit the query and load data
    .Select(x=> {
              var parts = x.dayState.Split('[', ']');
              return new {
                   x.dayDate,
                   x.empNum,
                   x.empName,
                   x.shiftId,
                   x.shiftName,
                   x.recordId,
                   dayState = parts.Length > 1 ?parts[1]:"",                 
             };
      })
      .ToList();

我有这个问题,我选择的方法是得到我想要的所有元素,并保存它们到列表,然后过滤该列表上的实际数据。我知道这不是最好的答案但它对我有效