我使用实体框架4遇到了这个查询的问题:
List<SomeResult> test = (from a in _entities.TableA
select new SomeResult
{
TestB = a.TableB.Name,
TestCDict = a.TableC.ToDictionary(x => x.SomeKey, x => x.SomeValue)
}).ToList();
它给出了这个错误:
“无法比较'System.Data.Objects.DataClasses.EntityCollection`1'类型的元素。仅支持基本类型(如Int32,String和Guid)和实体类型。”
如何重做此查询以便它可以正常工作?来自a.TableC中的c的_entities.TableA .... ToDictionary(..?
/拉塞
答案 0 :(得分:3)
问题是,您正在对数据库进行查询。您正在使用的LINQ提供程序实际上不执行您编写的任何操作。它只试图将Select中的所有代码转换为数据库查询。显然,它无法解析真正复杂的状态,就像你用ToDictionary()编写的那样。 您可以简单地将实体中的所有数据加载到内存中,然后执行所有字典内容。然后你的代码将被执行,并且应该可以工作。 像:
List<SomeResult> test = from a in (from aa in _entities.TableA).AsEnumerable())
select new SomeResult
{
TestB = a.TableB.Name,
TestCDict = a.TableC.ToDictionary(x => x.SomeKey, x => x.SomeValue)
}).ToList();
当然,你可以在内部查询中使用数据库侧过滤(在AsEnumerable()之前)来缩小加载到内存中的数据量。