不能用IQueryable在LINQ中进行强制转换吗?

时间:2015-08-12 20:18:24

标签: c# linq entity-framework

我想知道如何让下面的查询起作用:

IQueryable<TypeA> data  = ...;                  
data = data.OrderBy(x => ((TypeB)x.RelatedObject).Value);

我得到的错误是:

  

LINQ to中不支持指定的类型成员'RelatedObject'   实体。仅初始化程序,实体成员和实体导航   支持属性。

我对C#很新,我认为这是一个编译问题,因为我知道RelatedObject属于TypeB。 谢谢!

2 个答案:

答案 0 :(得分:2)

显然,实体框架并不知道(足够)关于TypeA和TypeB之间的关系。如果您可以将其定义为navigation property,则可以解决您的问题。

如果无法做到这一点,请插入.AsEnumerable()

data.AsEnumerable().OrderBy(x => ((TypeB)x.RelatedObject).Value);

这将做什么,是正常的&#39; LINQ执行排序,而不是数据库(在SQL查询中使用ORDER BY子句)。请注意,它返回IEnumerable<TypeA>而不是IQueryable<TypeA> - 这取决于您对此变量的处理方式,这可能会导致更多记录加载到内存中而非严格必要。

答案 1 :(得分:0)

如果您知道自己只获得一种特定类型,那么您应该能够做到这样的事情,假设EF知道继承。

IQueryable<TypeA> data  = ...;                  
data = data.OfType<TypeB>().OrderBy(x => (x.RelatedObject).Value);
相关问题