C# LINQ表达式节点类型';阵列索引';在LINQ to实体中不支持
我得到一个例外: LINQ to中不支持LINQ表达式节点类型“ArrayIndex” 实体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
如何在此查询中找到
拆分('[',']')[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();