Динамический запрос с помощью WCF RIA Services - PullRequest
2 голосов
/ 03 марта 2011

Я использую Silverlight 4 со службами WCF RIA (доменные службы с EF4).Теперь я хотел бы добавить функциональность, которая позволяет пользователю запрашивать данные на основе выбранных пользователем критериев (специальный запрос).Я обнаружил, что:

-WCF RIA Services не допускает анонимные типы, поэтому проекция linq невозможна.

-Объявление OData не помогает (сильно), потому что выне может фильтровать данные на стороне клиента.

При поиске в Интернете, похоже, я могу использовать динамическую библиотеку linq, описанную по следующей ссылке:

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

КорочеПриведенная выше ссылка показывает, как передать предикат поиска на сервер и выполнить запрос на стороне сервера.Но как насчет возврата произвольных данных?Анонимные типы не могут быть переданы, и я не хочу, чтобы пользователь извлекал все данные, а только те поля, которые выбрал пользователь.Может быть, я должен сериализовать свои данные сущности в доменной службе и передать их в виде необработанного XML?Является ли это возможным?Если так, как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 25 мая 2011

Для одного из наших сценариев у нас есть операция DomainService, которая возвращает строки XML, это выглядит примерно так:

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
}
0 голосов
/ 05 апреля 2012

Я собираюсь ответить на возврат произвольных данных. Взгляните на обсуждение здесь: https://stackoverflow.com/a/10018119/178620

Я добился возврата произвольных данных, создав новый объект POCO, который содержит IEnumerable. И я делаю сериализацию и десериализацию, используя Json.Net Bson, который намного быстрее, чем XML.

Обновление: Также есть динамическая библиотека Linq (https://stackoverflow.com/a/848435/178620)

...