代码之家  ›  专栏  ›  技术社区  ›  Zac

System.NotSupportedException:只能投影正在转换的查询中的最后一个实体类型

  •  2
  • Zac  · 技术社区  · 14 年前

    我正在将Linq与Odata Web服务结合使用

    from tp in TyrePatterns
    from t in tp.Tyres
    where t.Diameter == 195
    select tp
    

    看起来很简单,对吧?轮胎是轮胎制造商的财产。因此,为了确保您能看到我想要做的事情,我在SQL的神奇世界中所做的事情看起来应该是:

    SELECT DISTINCT TyrePatterns.Name
    FROM TyrePatterns
    INNER JOIN Tyres ON Tyres.TyreID = TyrePatterns.TyreID
    WHERE Tyres.Diameter = 195
    

    在我们的站点和linqpad中,linq代码给出了运行时错误:

    System.NotSupportedException:只能投影正在转换的查询中的最后一个实体类型。

    1 回复  |  直到 14 年前
        1
  •  2
  •   Vitek Karas MSFT    14 年前

    因此,进行此查询的正确方法是另一种方法: 轮胎?$filter=直径eq 195&$expand=tyrepattern 这将返回直径为195的所有轮胎,还将包括它们的类型模式(假设导航属性是双向的)。这不是你想要的,但它是你能得到的最接近的。

    翻译成linq这个看起来像

    from t in Tyres.Expand("TyrePatterns") where t.Diameter == 195 select t

    然后,您可以轻松地选择客户端上的tyrepatters。

    限制是您只能对导航中的最后一段(URL的路径部分)应用过滤器。