【问题标题】:Dynamic query with WCF RIA Services使用 WCF RIA 服务进行动态查询
【发布时间】:2011-03-03 05:18:59
【问题描述】:

我将 Silverlight 4 与 WCF RIA 服务(带有 EF4 的域服务)一起使用。现在我想添加一个功能,它允许用户根据用户选择的条件(即席查询)查询数据。我发现:

-WCF RIA 服务不允许匿名类型,因此无法进行 linq 投影。

-暴露 OData 没有帮助(很多),因为您无法在客户端过滤数据。

搜索互联网,似乎可以使用以下链接中描述的动态 linq 库:

http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

简而言之,上面的链接显示了如何将搜索谓词传递给服务器,并在服务器端执行查询。 但是返回任意数据怎么样?无法传递匿名类型,我不希望用户检索所有数据,而只检索用户选择的那些字段。也许我应该在域服务中序列化我的实体数据并将其作为原始 xml 传递?是否可以?如果是这样,我该怎么做?

【问题讨论】:

  • 我不完全明白,你可以在你的 DomainService 类中添加一些可以为空的查询参数并将它们传递给服务吗?

标签: linq silverlight-4.0 wcf-ria-services


【解决方案1】:

对于我们的一个场景,我们有一个返回 xml 字符串的 DomainService 操作,它看起来像这样:

public IQueryable<WidgetInfo> GetWidgetList()
{
    IList<WidgetInfo> widgets = WidgetDatabase.GetWidgets(userId);
    return widgets.AsQueryable();
}

WidgetInfo 看起来像这样:

public class WidgetInfo
{
    [Key]
    public int Id;
    public string Title;
    public string WidgetData;   // Contains XML description of data
}

【讨论】:

    【解决方案2】:

    我将响应返回任意数据。看看这里的讨论:https://stackoverflow.com/a/10018119/178620

    我通过创建一个包含 IEnumerable 的新 POCO 实体实现了返回任意数据。而且我使用Json.Net Bson做序列化和反序列化,比XML快很多。

    更新:还有动态 Linq 库 (https://stackoverflow.com/a/848435/178620)

    【讨论】:

      猜你喜欢
      • 2011-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多