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合作