gpt4 book ai didi

.net - 是否有一种通用方法来检查 Linq 提供程序(尤其是 OData)是否支持某个属性定义?

转载 作者:行者123 更新时间:2023-12-04 02:16:10 25 4
gpt4 key购买 nike

我在 LinqPad 中使用 NorthWind.sdf 成功运行了以下语句:

from s in Shippers
select new
{
s.ShipperID,
s.CompanyName,
Count=s.ShipViaOrders.Count()
}

同时,我在 LinqPad 中使用 Odata 服务( http://services.odata.org/northwind/northwind.svc)运行类似的语句失败:
from s in Shippers    
select new
{
s.ShipperID,
s.CompanyName,
Count=s.Orders.Count()
}

错误是“不支持使用表达式 s.Orders.Count() 构造或初始化 <>f__AnonymousType0`3[System.Int32,System.String,System.Int32] 类型的实例。”。

我知道 Linq 支持中的 OData 服务非常有限。我的应用程序中有动态 Linq 语句支持。实际上我正在尝试将数据源从 Compact SQL Server 迁移到 OData 服务。

所以我必须以一般的方式处理 NotSupportedException。目前,我尝试在运行之前检查propertydefine的语法,例如
"s.Orders.Count() as Count"   

它通过了我的检查,但遇到了 OData 的 NotSupportedException。

有没有办法检查 Linq 提供程序是否支持属性定义(通过字符串或 lambda)?

任何建议表示赞赏。

最佳答案

不幸的是,没有通用的编程方法来检查 LINQ 提供程序是否能够翻译任何给定的查询。通常,您将不得不求助于文档或(可以肯定)在您正在执行的过程中实际尝试查询。

然而,不同的提供者可能会提供一些为查询生成某种表示的机制,您可以使用它来检查查询是否可以工作而不必执行它。

在 OData 客户端情况下,您可以在查询上调用 .ToString(),如果它能够成功处理查询,它应该返回一个 URL;否则它将返回一条错误消息,类似于“将 Linq 表达式转换为 URI 时出错:...”(实际的错误消息可能会因用户语言而异,但它肯定不是有效的 URI)。

关于.net - 是否有一种通用方法来检查 Linq 提供程序(尤其是 OData)是否支持某个属性定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3091652/

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