我有一个名为DataList
的数据列表。 DataList
有字段id
和UpdatedTime
以及其他一些字段。另一方面,我的字典只有id
及其各自的值UpdatedTime
。
有没有办法过滤DataList,使其满足字典itemIdAndUpdatedTimeFilter
项目ID,并且它们各自的UpdatedTime
高于DataList
的{{1}}?
UpdatedTime
上述LINQ语句最终出现在以下异常中:
LINQ to Entities无法识别方法'布尔值 ContainsKey(Int32)'方法,这个方法无法翻译成 商店表达。
尝试删除Dictionary<int, DateTime> itemIdAndUpdatedTimeFilter = getFilter();
itemIdAndUpdatedTimeFilter.Add(1, dateA);
itemIdAndUpdatedTimeFilter.Add(2, dateB);
itemIdAndUpdatedTimeFilter.Add(3, dateC);
var dataList = getData();
var filtered = dataList.Where(d=>itemIdAndUpdatedTimeFilter.ContainsKey(d.Id) && itemIdAndUpdatedTimeFilter[d.Id] < d.UpdatedTime)
条件并改为:
LINQ to Entities无法识别方法'System.DateTime get_Item(Int32)'方法,并且此方法无法转换为 商店表达。
所需的查询是这样的:
ContainKey
答案 0 :(得分:1)
从数据库中获取所有项目并过滤内存中结果:
var dataList = getData().ToList();
var filtered = dataList.Where(d=>itemIdAndUpdatedTimeFilter.ContainsKey(d.Id) && itemIdAndUpdatedTimeFilter[d.Id] > d.UpdateTime)):
另一种选择是执行原始SQL或在数据库中执行过滤的存储过程:https://msdn.microsoft.com/en-us/library/jj592907(v=vs.113).aspx
实体框架将无法将您的过滤逻辑转换为有效的SQL查询。