Silverlight - LinqToEntities - Как вернуть анонимные типы - PullRequest
0 голосов
/ 03 декабря 2010

Я не уверен, правильно ли я пойду.У меня есть приложение Silverlight и я использую Entity Framework для многих из них.У меня есть две сущности, сопоставленные с моей базой данных: заголовок и детали.Я хочу отправить левое внешнее объединение, чтобы получить все заголовки и количество деталей - даже если запись заголовка не имеет подробной записи.Вот запрос Linq, который я хочу запустить с клиента:

var query =
      from head in storeContext.Headers
      join detail in storeContext.Details
      on head.HeadId equals details.HeadId
      into group
      select new 
      {
        Desc = head.Description,
        MyCount = group.Count()
      };

Поскольку это Silverlight, мне нужно создать свой запрос, а затем отправить его на сервер с помощью метода storeContext.Load<T>() из моей доменной службы.(Контекст на клиенте).Поскольку этот метод ожидает тип, я не знаю, как структурировать вызов так, чтобы он возвращал анонимный тип, как я выше?

Я все делаю неправильно?Должен ли я использовать метод Invoke для чего-то вроде этого?Если да, то как и где я могу определить тип, который я хочу вернуть?

Кто-то может указать мне правильное направление, я бы действительно оценил его.

Спасибо ... Скотт

Ответы [ 2 ]

5 голосов
/ 03 декабря 2010

Вы не можете вернуть анонимный тип. По необходимости они локальны для текущей области.

Ваш запрос выглядит правильно, но вам нужно будет вернуть именованный тип:

var query =
      from head in storeContext.Headers
      join detail in storeContext.Details
      on head.HeadId equals details.HeadId
      into group
      select new MyHelper // SPECIFY A CLASS HERE
      {
        Desc = head.Description,
        MyCount = group.Count()
      };

Ваш метод запроса должен будет вернуть IEnumerable<MyHelper>:

public IEnumerable<MyHelper> GetInfo()
{
    var query ...

    return query;
}
1 голос
/ 03 декабря 2010

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

...