【问题标题】:'IQueryable<Entity>' does not contain a definition for 'Expand'“IQueryable<Entity>”不包含“扩展”的定义
【发布时间】:2018-05-11 02:10:47
【问题描述】:

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

“IQueryable”不包含“Expand”的定义,并且找不到接受“IQueryable”类型的第一个参数的扩展方法“Expand”。

我正在做这样的事情:

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

【问题讨论】:

  • 你能把 entityService.All() 转换成 DataServiceQuery&lt;T&gt;T 是你的 DTO 类型)吗?
  • 否,因为很多地方都在使用它
  • entityService.Expand("parent").All().ToList(); 怎么样?
  • 试过但没用
  • 当你说 include 不起作用时,发生了什么?

标签: c# entity-framework linq odata expand


【解决方案1】:

我使用 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 很重要。

【讨论】:

    猜你喜欢
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多