Dynamic query with WCF RIA Services

2019-01-28 16:45发布

I use Silverlight 4 with WCF RIA Services (domain services with EF4). Now I'd like to add a functionality, which allow an user to query data based on the criteria user selected (ad-hoc query). I've found that:

-WCF RIA Services doesn't allow anonymous types, so linq projection isn't possible.

-Exposing OData doesn't help (much), because you can't filter data at client-side.

Searching Internet, it seems I can use dynamic linq library described in the following link:

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

In short, the above link shows how to pass search predicate to server, and execute query at the server-side. But how about returning arbitrary data? Anonymous types can't be passed, and I don't want user to retrieve all data, but only those fields user chose. Maybe I should serialize my entity data in domain service and pass it as raw xml? Is it possible? If so, how can I do that?

2条回答
Evening l夕情丶
2楼-- · 2019-01-28 16:56

For one of our scenarios we have a DomainService operation which returns xml strings, it looks something like this:

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

where WidgetInfo looks like this:

public class WidgetInfo
{
    [Key]
    public int Id;
    public string Title;
    public string WidgetData;   // Contains XML description of data
}
查看更多
甜甜的少女心
3楼-- · 2019-01-28 16:57

I'm going to respond to returning arbitrary data. Take a look at the discussion here: https://stackoverflow.com/a/10018119/178620

I have achieved returning arbitrary data by creating a new POCO Entity, which contains IEnumerable. And I do serialization and deserialization using Json.Net Bson, which is much faster than XML.

Update: There's also the Dynamic Linq Library (https://stackoverflow.com/a/848435/178620)

查看更多
登录 后发表回答