【问题标题】:Supported Linq for WCF Data ServicesWCF 数据服务支持的 Linq
【发布时间】:2010-05-05 17:39:56
【问题描述】:

我正在寻找与 WCF 数据服务兼容的受支持 linq 扩展方法的完整列表。

通过反复试验,我发现不支持 First(Func) 和 Single(Func),还有其他的吗?

This 让我对支持的内容有了一个很好的了解,我只是不知道通过 IQueryProvider 实际翻译了什么。

【问题讨论】:

  • 链接转到“此主题不再可用”

标签: linq wcf-data-services


【解决方案1】:

我发现一个网站列出了不受支持的 linq 方法

http://msdn.microsoft.com/en-us/library/ee622463.aspx#unsupportedMethods

【讨论】:

    【解决方案2】:

    Silverlight 不支持 First 和 Single,因为 Silverlight 要求所有网络都异步完成,但您可以使用类似这样的代码来模拟它

    NorthwindEntities context = new NorthwindEntities(new Uri("Northwind.svc", UriKind.Relative));
    DataServiceQuery<Order> q = (DataServiceQuery<Order>)context.Orders.Take(1);
    q.BeginExecute((IAsyncResult ar) =>
        {
            var o = ((DataServiceQuery<Order>)q).EndExecute(ar).First();
            txtOutput.Text = o.OrderID.ToString();
        }, null);
    

    在此代码中,您只请求使用 Take(1) 通过网络发送一个,然后一旦它已经在客户端上,使用 First() 或 Single() 即可轻松获取单例引用。

    据我所知,没有可用的受支持 Linq 运算符的明确列表。

    -杰夫

    【讨论】:

    • 四年后,这仍然是获得 WCF 数据服务的 First() 和 Single() 支持的唯一方法。呃。
    【解决方案3】:

    您的发现确实很有趣 - 特别是如果您查看 MSDN 文档 Querying the Data Service (WCF Data Services)

    在第一段中,文档声明:


    查询在以下场景中执行:

    • 隐式枚举结果时,例如:
      • 当枚举表示实体集的 DataServiceContext 上的属性时,例如在 foreach (C#) 或 For Each (Visual Basic) 循环期间。
      • 将查询分配给 List 集合时。
      • 当显式调用 Execute 或 BeginExecute 方法时。
      • 当调用 LINQ 查询执行运算符(例如 First 或 Single)时

    再往下几行,有一个黄色的“注”框说明:

    注意

    在 LINQ 语法比那些更广泛 在具象状态下启用 基于传输 (REST) 的 URI 语法 由数据服务使用。一种 NotSupportedException 引发时 查询不能映射到 URI 目标数据服务。

    不幸的是,我找不到 WCF 数据服务支持或不支持 LINQ 语法中哪些运算符的任何明确列表 - 文档中明显缺乏!

    【讨论】:

    • 谢谢,我用 Func 参数调用了 First() 和 Single()。那些仍然抛出错误。 First() 虽然效果很好。仍在寻找那个清单。 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多