C# Can';你不能用IQueryable在LINQ里表演吗?

C# Can';你不能用IQueryable在LINQ里表演吗?,c#,linq,entity-framework,C#,Linq,Entity Framework,我想知道如何让下面的查询工作: IQueryable<TypeA> data = ...; data = data.OrderBy(x => ((TypeB)x.RelatedObject).Value); IQueryable数据=。。。; data=data.OrderBy(x=>((TypeB)x.RelatedObject).Value); 我得到的错误是: LINQ to中不支持指定的类型成员“RelatedObject” 实

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

IQueryable<TypeA> data  = ...;                  
data = data.OrderBy(x => ((TypeB)x.RelatedObject).Value);
IQueryable数据=。。。;
data=data.OrderBy(x=>((TypeB)x.RelatedObject).Value);
我得到的错误是:

LINQ to中不支持指定的类型成员“RelatedObject” 实体。仅初始值设定项、实体成员和实体导航 支持属性

我对C非常陌生,我认为这是一个编译问题,因为我知道
RelatedObject
属于
TypeB

谢谢

显然,实体框架对TypeA和TypeB之间的关系知之甚少。如果你能把它定义为一个,那就解决了你的问题

如果不可能,则插入应起作用:

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

这样做的目的是让“普通”LINQ执行排序,而不是数据库(在SQL查询中使用ORDERBY子句)。请注意,它返回一个
IEnumerable
而不是
IQueryable
——根据您对该变量所做的操作,这可能会导致将更多记录加载到内存中,而不是严格必要的记录。

如果您知道您只得到一个特定类型,您应该能够执行类似的操作,假设EF知道继承

IQueryable<TypeA> data  = ...;                  
data = data.OfType<TypeB>().OrderBy(x => (x.RelatedObject).Value);
IQueryable数据=。。。;
data=data.OfType().OrderBy(x=>(x.RelatedObject).Value);

这使得Linq-to-SQL向Linq-to实体提出了问题,从而通过default@MrinalKamboj我已经意识到了这一点,但我想我没有说得足够清楚。在我看来,你的回答很清楚,但不确定它是否适用于所有使用EF的人,他们希望继续与IQueryable合作