繁体   English   中英

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

[英]Unrecognized expression node ArrayIndex using linq with predicate

嗨,我有这个查询...

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错误,我该如何克服...在这里我正在检查使用谓词的条件。

看起来这是LINQ to Entities,而不是普通的LINQ。 您的context是实体框架还是LINQ to SQL上下文?

如果是这样,则LINQ to Entities / SQL将尝试将此表达式转换为SQL,如果它包含不知道的函数调用或没有等效SQL的函数调用,则它将无法执行该操作。

我的钱是用Split() ; 我敢打赌LINQ to Entities barfs on this。

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

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

如果您是我,我会去数据库设计,然后将ENQUIRY_PATIENT_DURATION转换为2列,然后正确执行。 您的代码似乎很容易出错。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM