Что возвращать из службы WCF при использовании linq? - PullRequest
2 голосов
/ 23 августа 2010

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

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

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

Ответы [ 3 ]

2 голосов
/ 23 августа 2010

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

1 голос
/ 23 августа 2010

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

1 голос
/ 23 августа 2010

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

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

var res = (from q in context.cust select q).ToList();
...