'IQueryable<Entity>' 不包含 'Expand' 的定义

'IQueryable<Entity>' does not contain a definition for 'Expand'

我正在尝试扩展 OData 中的实体。我试过 Include() 但没有成功。然后我正在尝试 Expand() 但得到:

'IQueryable<City>' does not contain a definition for 'Expand' and no extension method 'Expand' accepting a first argument of type 'IQueryable<City>' could be found`.

我正在做这样的事情:

var cities = cityService.All().Expand("State").Expand("State.Country").ToList();

我使用 OData 客户端已经有一段时间了,是否在 DataServiceQuery 上展开?在这种情况下,您可以在 IQueryable 上编写和扩展方法。

public static class IQueryableExtensions
{
    public static IQueryable<T> Expand<T>(this IQueryable<T> source, string navigationProperty)
    {
        var dsq = (DataServiceQuery<T>)source;
        return dsq.Expand(navigationProperty);
    }
}

现在您可以在 IQueryable 上使用它。如果您的代码要在其他基础类型的 IQueryable 上调用它,您将需要处理该行为(什么都不做、抛出错误、调用 Include 等)

不过这有点麻烦,如果您正在处理 DataServiceQuery 并且您想要它的独特功能,那么您真的应该明确地处理该类型。

听起来像 entityService.All() 应该返回 DataServiceQuery,因为重要的是它的特定类型而不是通用 IQueryable。