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

时间:2013-01-03 10:43:35

标签: c# asp.net linq

您好我有这个问题......

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错误我怎么能克服... 在这里我正在检查使用谓词的条件......

2 个答案:

答案 0 :(得分:4)

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

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

我的钱是Split()的使用;我敢打赌那个LINQ to Entities barfs。

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

答案 1 :(得分:0)

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

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

相关问题