40

我正在尝试从 EF / Linq 查询中加载 KeyValuePairs 列表,如下所示:

return (from o in context.myTable 
select new KeyValuePair<int, string>(o.columnA, o.columnB)).ToList();

我的问题是这会导致错误

“LINQ to Entities 仅支持无参数构造函数和初始化程序。”

有没有简单的方法解决这个问题?我知道我可以为此创建一个自定义类,而不是使用 KeyValuePair,但这似乎是在重新发明轮子。

4

3 回答 3

84

从表中仅选择 columnA 和 columnB,并在内存中进行进一步处理:

return context.myTable
              .Select(o => new { o.columnA, o.columnB }) // only two fields
              .AsEnumerable() // to clients memory
              .Select(o => new KeyValuePair<int, string>(o.columnA, o.columnB))
              .ToList();

还考虑创建包含 KeyValuePairs 的字典:

return context.myTable.ToDictionary(o => o.columnA, o => o.columnB).ToList();
于 2013-06-25T15:59:10.327 回答
10

由于 LINQ to Entities 不支持KeyValuePair,您应该首先使用 LINQ to Object AsEnumerable

return context.myTable
              .AsEnumerable()
              .Select(new KeyValuePair<int, string>(o.columnA, o.columnB))
              .ToList();
于 2013-06-25T15:58:06.420 回答
0

还有另一种选择,当您想为一个键存储多个值时,存在称为Lookup的东西。

表示一组键,每个键映射到一个或多个值。

这里有一些官方文档

More over lookup似乎比Dictionary < TKey, List < TValue >> 快得多。

于 2017-09-18T10:11:40.000 回答