无法识别的表达式节点ArrayIndex使用linq与谓词

本文关键字:使用 linq 谓词 ArrayIndex 节点 识别 表达式 | 更新日期: 2023-09-27 17:50:43

你好,我有这个查询…

List<VisitorsVo> lstVisitors = new List<VisitorsVo>();
            var predicate = ReturnPredicateForVisitors(p_htVisitor);
            if (predicate != null)
            {
                lstVisitors = (from n in context.TBL_VISITORs.Where(predicate)
                               select new VisitorsVo
                               {
                                   VisitId = n.VISIT_ID,
                                   VisitorName = n.VISITOR_NAME,
                                   ResidentDuration = n.ENQUIRY_PATIENT_DURATION.Split(';')[0] + " " + n.ENQUIRY_PATIENT_DURATION.Split(';')[1],
                               }).ToList();
            }

但我得到无法识别的表达式节点ArrayIndex错误,我怎么能克服…这里我检查使用谓词....

无法识别的表达式节点ArrayIndex使用linq与谓词

的条件

看起来这是对实体的LINQ,而不是普通的LINQ。你的context是一个实体框架或LINQ到SQL上下文?

如果是,那么LINQ to Entities/SQL将尝试将这个表达式转换为SQL,如果它包含它不知道的函数调用或没有SQL等效的函数调用,它就不能这样做。

我的钱是用Split();我敢打赌LINQ to Entities会禁用它。

你可以做的是修改你的查询,以摆脱Split(),然后你可以查询lstVisitors(现在只是一个内存中的数据结构,它没有链接到实体框架),并使用Split()那里。

如果您需要拆分列,这意味着您可以将该数据保存在两个单独的列中。

如果我是你,我会去数据库设计和转换ENQUIRY_PATIENT_DURATION为2列,并做正确的。你的代码似乎很容易出错。