我正在尝试在OData中扩展一个实体。我试过了Include()
,但它没有用。然后我正在尝试Expand()
,但得到:
'的IQueryable<市>'不包含'Expand'的定义,也没有扩展方法'Expand'接受'IQueryable< City>'类型的第一个参数可以找到。
我正在做这样的事情:
var cities = cityService.All().Expand("State").Expand("State.Country").ToList();
答案 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。