我很确定我不能在 EF4.3 中做我想做的事情,但在我放弃尝试之前,我想我会由一些更有经验的程序员来运行它。
我有一个模式,其中两种实体类型“person”和“org”,每个都派生自一个我称之为“named”的根实体。这种结构允许我通过多对多关系“entity_address”将“named”的实例与另一个名为“address”的实体的实例相关联,而无需区分“named”实体是组织还是人。
当我查询 entity_address 时,我希望能够根据 entity_address 实例是“人”还是“组织”,按不同的属性对结果进行排序。对于一个人来说,排序算法的“输入”可能是属性“last_name”的值,而对于一个组织来说,它可能是属性“org_name”。
如果我尝试明显:
IQueryable<named> sorted = entities.OrderBy(x => ( x is person ) ? ( (person) x ).last_name : ( (org) x ).org_name);
当我访问“排序”时,EF 会抛出一个关于只能转换原始类型的异常。我认为它不能将强制转换运算符应用于“x”实例。
我尝试了很多不太明显的方法,但没有成功:)。
有没有办法在 LINQ to Entities 中做到这一点?
我知道我可以通过非规范化数据库并在实体“命名”中粘贴一个“sort_field”来解决问题,然后对其进行排序(我必须包含使 sort_field 值与实例中的值更改保持一致的逻辑个人和组织,但这当然是可行的)。