如何在Netflix OData API中使用匿名类型

时间:2010-12-28 23:20:54

标签: linq odata

如果我创建此集合:

IEnumerable<_TITLE> _titles = null;

如何在此表达式中设置Netflix的结果集:

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

我得到了:

  

无法隐式转换类型   'System.Linq.IQueryable'   至   'System.Collections.Generic.IEnumerable&LT; _title&GT;'。   存在显式转换(是你   错过演员?)

我理解这是因为我使用的是匿名类型。 _TITLE是我创建的自定义复杂对象,它公开了Netflix属性的子集。

如果我在“new”的前面添加“_TITLE”,则表示我的对象没有实现IENUMBERABLE。

如果然后_TITLE实现了IENUMBERABLE,它说_TITLE不包含ADD的定义并且仍然会出现转换错误。

基本上,我想用Netflix返回的数据设置_TITLE属性。我已经定义_TITLE来包含我需要的字段,以及PERSON的集合(用于Cast)。

2 个答案:

答案 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 :(得分:1)

除了v​​csjones的回答,你不需要在_TITLE上实现IEnumerable。发生了什么事情,当你写作

var foo = new TYPENAME { a, b };

意思是:

  1. 创建一个新的TYPENAME,它实现了IEnumerable
  2. 调用foo.Add(a)然后foo.Add(b);
  3. 示例:

    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);