'IQueryable <entity>'不包含'Expand'

时间:2017-11-27 18:40:15

标签: c# entity-framework linq odata expand

我正在尝试在OData中扩展一个实体。我试过了Include(),但它没有用。然后我正在尝试Expand(),但得到:

  

'的IQueryable&LT;市&GT;'不包含'Expand'的定义,也没有扩展方法'Expand'接受'IQueryable&lt; City&gt;'类型的第一个参数可以找到。

我正在做这样的事情:

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

1 个答案:

答案 0 :(得分:2)

自从我使用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上使用它了。如果您的代码要在其他基础类型的IQueryables上调用它,您将需要处理该行为(不执行任何操作,抛出错误,调用Include等)。

它有点像黑客,如果你正在处理DataServiceQuery并且你想要它独有的功能,你应该明确地处理这种类型。

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