C# LINQ表达式节点类型';阵列索引';在LINQ to实体中不支持

C# LINQ表达式节点类型';阵列索引';在LINQ to实体中不支持,c#,asp.net,linq,entity-framework,linq-to-entities,C#,Asp.net,Linq,Entity Framework,Linq To Entities,我得到一个例外: LINQ to中不支持LINQ表达式节点类型“ArrayIndex” 实体 如何在此查询中找到拆分('[',']')[1]的替代方法您必须提交查询并在加载数据后执行拆分: var residenceRep = ctx.ShiftEmployees .Include(s => s.UserData.NAME) .Include(s => s.ResidenceShift.shiftName) .Join(c

我得到一个例外:

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


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

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

 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();

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

属性或索引器'AnonymousType#1.dayState'不能被指定——它是只读的
,我认为最好使用
.AsEnumerable()
而不是
.ToList()
,因为它不会完全迭代查询结果。请看这里:
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();