我想知道如何让下面的查询起作用:
IQueryable<TypeA> data = ...;
data = data.OrderBy(x => ((TypeB)x.RelatedObject).Value);
我得到的错误是:
LINQ to中不支持指定的类型成员'RelatedObject' 实体。仅初始化程序,实体成员和实体导航 支持属性。
我对C#很新,我认为这是一个编译问题,因为我知道RelatedObject
属于TypeB
。
谢谢!
答案 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);