Что вернуть из службы WCF при использовании linq?

Что я должен вернуть из службы WCF при использовании LINQ? например:

var res = from q in context.cust
          select q;

LINQ следует за отложенным выполнением, и, таким образом, оператор ничего не делает, пока не будет запущен цикл for. Это означает, что я не могу просто вернуть Res. Тогда что я должен вернуть? Нужно ли писать цикл for и заполнять объекты и возвращать их список каждый раз, когда я хочу вернуть данные из службы WCF? Нет ли аналога ADO.NET DataSet, который следует за автономной архитектурой и идеально подходит для перемещения данных между различными уровнями и из веб-службы или службы WCF?

3 ответа

Решение

Выполнение откладывается до тех пор, пока данные фактически не будут запрошены, вы правы, что это может быть цикл for, но это также будет необходимо, когда его необходимо сериализовать для передачи через WCF. Если вы заставите службу WCF возвращать IEnumerable, запрос будет выполнен, а результаты возвращены.

Из-за контекста, указанного в вашем запросе, вы должны выполнить запрос явно, преобразовав результат в массив или список. Контекст, вероятно, связан с Linq-To-Sql или EF, и существует большая вероятность того, что во время сериализации отложенное выполнение завершится неудачно, поскольку контекст уже будет закрыт.

Если вы вернете это как IEnumerable<cust> Сериализатор WCF должен выполнить запрос.

Но я обычно делаю

var res = (from q in context.cust select q).ToList();
Другие вопросы по тегам