Отправить запрос linq на сервер как объект - PullRequest
0 голосов
/ 19 апреля 2011

У меня есть запрос linq, подобный следующему:

from x in from dbcontext
 join y in dbcontext on x.id equals y.id select new {x,y}

Моя проблема в том, как я могу отправить запрос такого типа на сервер, как здесь. Мой запрос linq - прямой доступ к данным, который мне нужно отправить.их на мой сервер данных, но мне нужен объект.как я могу это реализовать?

Ответы [ 3 ]

2 голосов
/ 19 апреля 2011

Нехорошо.Запрос Linq содержит ссылки на контекст.У вас нет контекста на клиенте, и даже если он у вас есть, это будет другой экземпляр на сервере.Выполнение чего-либо подобного потребовало бы чертовски больших усилий.Также вы возвращаете проекцию на анонимный тип - еще одна очень сложная функция при удаленном выполнении.

Это, конечно, может быть выполнено - службы данных WCF уже сделали это.У них есть клиентский «прокси» контекста, запрос сериализуется как строка запроса OData, а дерево выражений строится из этой строки на стороне сервера.Они также поддерживают прогнозы, но не поддерживают STE.Попробуйте WCF Data Services .

Если вам не нравится идея WCF Data Services, вы должны предоставить метод для каждого такого запроса на стороне сервера, и клиент должен вызвать этот метод удаленно.

1 голос
/ 19 апреля 2011

во-первых, IIRC вы не можете сериализовать выражения, поэтому сначала посмотрите на этот пост

, а затем что-то вроде следующего:

public List<ContactDetails> GetAllContactDetails( List<Guid> ContactIDs, Func<List<ContactDetails>, IEnumerable<ContactDetails>> filter )
{
    List<ContactDetails> result = new List<ContactDetails>();

    // get contacts as usual, fill result
    // ...

    return filter.Invoke( result ).ToList();
}

Использование:

GetAllContactDetails( idList, ( result ) =>
    from contact in result
    where contact.DateOfBirth > DateTime.Now.AddYears( -10 )
    select contact );

DR

0 голосов
/ 19 апреля 2011

Поскольку деревья выражений не сериализуемы, их нельзя легко сделать 1002 *.

Мой уровень доступа к данным не построен с помощью EF, поэтому мое решение может быть полезным для вас, а может и не быть, но в любом случае вот оно:
Я анализирую выражение на стороне клиента в самодельном сериализуемом выражении (которое имеет такие свойства, как «столбцы», «объединения», «фильтры» и т. Д.), А на стороне сервера я создаю sql на основе этих выражений. Разумеется, вы можете создавать выражения из них и отправлять их поставщику EF linq!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...