gpt4 book ai didi

c# - Linq To Entities 方法错误包含 NotSupportedException

转载 作者:太空宇宙 更新时间:2023-11-03 16:07:41 24 4
gpt4 key购买 nike

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

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

我得到了一个NotSupportedException:不支持方法'Contains'。

我将查询更改为

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”方法的源参数必须是导航或集合属性

我想在继续之前我可以听取一些建议。

编辑

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

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

最佳答案

据我所知,在这种情况下,LINQ 支持似乎是有限的,但我仍然不知道为什么 contains 在 DataServiceQuery 上不起作用。 MSDN 文档表明它是受支持的。对 DataServiceContext 的查询解析 OData format 中的 url :

http://services.odata.org/OData/OData.svc/Category(1)/Products ?$top=2&$orderby=name

我使用的解决方案 - 添加 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 上的作品。

关于c# - Linq To Entities 方法错误包含 NotSupportedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18702663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com