Linq To Entities方法的错误包含NotSupportedException

时间:2013-09-09 16:21:14

标签: c# entity-framework entity-framework-5

我已经检查了其他问题,我相信这应该有效:

private static List<Duck> GetDucks(this DataServiceContext ctx, params int[] ids)
{
    return ctx.CreateQuery<Duck>("Ducks").Where(x => ids.Contains(x.DuckID)).ToList();
}

我收到了 NotSupportedException:不支持“包含”方法。

我将查询更改为

Where(x => ids.Any(id => id == x.DuckID)

我收到了以下消息:当MaxProtocolVersion小于'3.0 '时,不支持'Any'方法

然后我以不同的方式构造了DataServiceContext:

public static  DataServiceContext Context
{
    get { return new DataServiceContext(baseUri, DataServiceProtocolVersion.V3); }
}

然后我收到了消息: NotSupportedException:'Any'方法的source参数必须是导航或集合属性

我认为在继续前进之前我可以提供一些建议。

修改

我确实在客户端和服务器端使用了MaxProtocolVersion 3。

在任何情况下,此特定错误消息现在已消失,因为我不再尝试返回数据子集。我只需要预先获得完整的实体列表(尽管这需要进一步考虑/优化)。我错误地认为,如果我有一个空的临时DataServiceContext,我将不得不检索我想要更新的实体,然后将它们保存回来(受到我发现的更新执行更新的各种示例的影响)。当然,方法 AttachTo(EntitySetName,entity)是正确的解决方案。然后,您可以在 TempContext.SaveChanges()之前调用 UpdateObject(entity)

1 个答案:

答案 0 :(得分:0)

从我学到的内容看起来,这种情况下的LINQ支持是有限的,尽管我仍然不知道为什么包含不适用于DataServiceQuery。 MSDN文档表明它受支持。对DataServiceContext的查询解析OData format中的URL:

http://services.odata.org/OData/OData.svc/Category(1)/Products $顶部= 2&安培; $的OrderBy =名称

我使用的解决方案 - 添加WCF数据服务操作/方法:

    [WebGet]
    public IQueryable<Thing> GetThingsByID(string ids)
    {
        return CurrentDataSource.Things.Where(x => ids.Contains(x.ThingID.ToString())).AsQueryable();
    }

以上应该允许我过滤:

WCF Data Service operations

Calling Service Operations

我将id作为CSV传递,因为只有原始数据类型可以作为参数传递

注意: 包含DBContext上的工作。