2010-12-28 2 views
0

Если я создаю эту коллекцию:Как использовать анонимные типы с Netflix OData API

IEnumerable<_TITLE> _titles = null; 

Как установить результирующий набор из Netflix в этом выражении:

_titles = from t in Titles where t.Id == "ApUFq" select new {t, t.Cast} 

Я получаю:

не может неявно преобразовать тип 'System.Linq.IQueryable' к «Sy stem.Collections.Generic.IEnumerable < _Title> '. Явное преобразование существует (вы отсутствует бросок?)

Я понимаю, что это потому, что я использую анонимного типа. _TITLE - это настраиваемый сложный объект, который я создаю, который предоставляет подмножество свойств Netflix.

Если я добавлю «_TITLE» перед «новым», он говорит, что мой объект не реализует IENUMBERABLE.

Если тогда _TITLE реализует IENUMBERABLE, он говорит, что _TITLE не содержит определения для ADD и все еще получает ошибку преобразования.

В принципе, я хочу установить свойства _TITLE с данными, возвращаемыми из Netflix. Я определил _TITLE, чтобы содержать нужные мне поля, а также коллекцию PERSON (для Cast).

+0

пожалуйста исправить ваш текст, чтобы он правильно форматировал ваш код. –

ответ

1

Если ваш общий тип _TITLE, вам необходимо сделать select new _TITLE {Prop = Value}.

Если вы собираетесь использовать общий тип, то вам нужно использовать var:

var _titles = from t in Titles where t.Id == "ApUFq" select new {t, t.Cast}; 

Так что, возможно, это то, что вы имели в виду:

var _titles = from t in Titles where t.Id == "ApUFq" select new _TITLE {Title = t}; 

Что-то вдоль этих линий. var может использоваться, даже если вы не собираетесь использовать анонимный тип.

1

В дополнение к ответу vcsjones, вам не нужно реализовывать IEnumerable на _TITLE. Что происходит в том, что когда вы пишете

var foo = new TYPENAME { a, b }; 

это означает:

  1. создать новый TYPENAME, который реализует IEnumerable
  2. вызов foo.Add (а), то foo.Add (б);

Пример:

var names = new List<string> { "Joe", "Mary", "Susan" }; 

Как уже упоминалось vcsjones, Вы должны использовать имена параметров при инициализации объекта, или, возможно, вы имели в виду использовать круглые скобки и вызовите конструктор

var title = new _TITLE { Title = t.ID, Cast = t.Cast }; 
// or 
var title = new _TITLE (t.ID, t.Cast); 
+1

Зачем ему нужно реализовать 'IEnumerable' на _TITLE?Я думаю, что, как предполагается, это работает, LINQ работает с возвратом IEnumerable <_TITLE>. Проблема, о которой я думаю, возникала, заключалась в том, что он использовал {} в качестве инициализатора коллекции, когда он хотел использовать его как инициализатор объекта. – vcsjones

Смежные вопросы