这是我的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”,我做错了吗?
答案 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;