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

Linq 如何在Netflix OData API中使用匿名类型,linq,odata,Linq,Odata,如果我创建此集合: IEnumerable<_TITLE> _titles = null; 我得到: 无法隐式转换类型 “System.Linq.IQueryable” 到 'System.Collections.Generic.IEnumerable'。 存在一个显式转换(您是吗 缺少演员阵容?) 我明白这是因为我使用的是匿名类型_TITLE是我创建的一个自定义复杂对象,它公开Netflix属性的子集 如果在“new”前面添加“_TITLE”,则表示我的对象未实现IENUMBER

如果我创建此集合:

IEnumerable<_TITLE> _titles = null;
我得到:

无法隐式转换类型 “System.Linq.IQueryable” 到 'System.Collections.Generic.IEnumerable'。 存在一个显式转换(您是吗 缺少演员阵容?)

我明白这是因为我使用的是匿名类型_TITLE是我创建的一个自定义复杂对象,它公开Netflix属性的子集

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

如果then_TITLE实现了IENUMBERABLE,则表示_TITLE不包含ADD的定义,并且仍然存在获取转换错误


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

如果您的泛型类型是_TITLE,那么您需要执行
选择新_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};

沿着这些路线的东西<即使您不打算使用匿名类型,也可以使用code>var。

除了vcsjones的答案之外,您不需要在标题上实现IEnumerable。当你写作的时候发生了什么

var foo = new TYPENAME { a, b };
这意味着:

  • 创建一个新的TYPENAME,它实现IEnumerable
  • 调用foo.Add(a),然后调用foo.Add(b) 例如:

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

    请修复您的文本,使其正确格式化代码。为什么他需要在标题上实现
    IEnumerable
    ?我认为这个假设的工作方式是LINQ操作收益IEnumerable。我认为出现的问题是,当他打算将{}用作对象初始值设定项时,他使用了{}作为集合初始值设定项。
    var names = new List<string> { "Joe", "Mary", "Susan" };
    
    var title = new _TITLE { Title = t.ID, Cast = t.Cast };
    // or
    var title = new _TITLE (t.ID, t.Cast);