LINQ to SQL中的“无法识别的表达式节点数组索引linq”异常

时间:2014-01-16 09:38:18

标签: c# linq linq-to-sql

这是我的LINQ,其中我将DateTime类型的字段与当前日期进行比较 -

 var srs = (from s in dcDistrict.ScheduledReportStatus
            where s.ReportConfigId.Equals(ConfigId)
            && s.Status.HasValue && s.Status.Value
            && (Convert.ToString(s.SentDate).Split(' ')[0]).Equals(Convert.ToString(DateTime.Now.Date).Split(' ')[0])
            select s).FirstOrDefault();

这段代码给出了“无法识别的表达式节点数组索引linq”,我做错了吗?

2 个答案:

答案 0 :(得分:4)

我得到了解决方案,我需要做的是使用“AsEnumerable()”,这是我的LINQ的已解析版本 -

 Var srs = (from s in dcDistrict.ScheduledReportStatus.AsEnumerable()
                                         where s.ReportConfigId.Equals(ConfigId)
                                         && s.Status.HasValue && s.Status.Value
                                         && (Convert.ToString(s.SentDate).Split(' ')[0]).Equals(Convert.ToString(DateTime.Now.Date).Split(' ')[0])
                                         select s).FirstOrDefault();

AsEnumerable()完成了代码客户端的某些部分,解决了我的问题。

答案 1 :(得分:2)

尽可能在服务器上过滤,然后在客户端上无法过滤。

var startDate = new DateTime(DateTime.Today.Year, 1, 1);
var endDate = startDate.AddYears(1);
var serverQuery = from s in dcDistrict.ScheduledReportStatus
    where s.SentDate >= startDate && s.SentDate < endDate
        && s.ReportConfigId.Equals(ConfigId)
        && s.Status.HasValue && s.Status.Value
    select s;
var clientQuery = from s in serverQuery
    where // whatever client side filtering
    select s;