【发布时间】:2017-09-15 14:58:49
【问题描述】:
我有一个名为DataList 的数据列表。 DataList 具有字段 id 和 UpdatedTime 以及其他一些字段。另一方面,我有一本只有id 及其各自值UpdatedTime 的字典。
有什么方法可以过滤 DataList 使其满足字典 itemIdAndUpdatedTimeFilter 项 ID 并且它们各自的 UpdatedTime 高于 DataList 的 UpdatedTime?
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 语句以下列异常结束:
LINQ to Entities 无法识别“Boolean”方法 ContainsKey(Int32)' 方法,该方法不能翻译成 商店表达式。
尝试删除 ContainKey 条件并改为获取以下内容:
LINQ to Entities 无法识别方法“System.DateTime” get_Item(Int32)' 方法,并且该方法不能翻译成 存储表达式。
所需的查询是这样的:
SELECT FROM dataList
WHERE (dataList.UpdatedTime < dateA AND dataList.Id = 1)
OR (dataList.UpdatedTime < dateB AND dataList.Id = 2)
OR (dataList.UpdatedTime < dateC AND dataList.Id = 3)
【问题讨论】:
-
您不能使用字典来过滤数据库表,它不能翻译成 sql 存储表达式。还是示例 sql 只是内存过滤器的可比较语法?
-
@Igor 我明白了,谢谢
标签: c# sql performance linq dictionary