如何通过 Netflix OData API 使用匿名类型

发布于 2024-10-09 08:54:04 字数 665 浏览 6 评论 0原文

如果我创建此集合:

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<_Title>'。 存在显式转换(您是 缺少演员?)

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

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

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

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

If I create this collection:

IEnumerable<_TITLE> _titles = null;

How can I set the result set from Netflix in this expression:

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

I am getting:

Cannot implicitly convert type
'System.Linq.IQueryable'
to
'System.Collections.Generic.IEnumerable<_Title>'.
An explicit conversion exists (are you
missing a cast?)

I understand it's because I am using an anonymous type. _TITLE is a custom complex object I create that exposes a subset of Netflix properties.

If I add "_TITLE" in front the of the "new" it says that my object does not implement IENUMBERABLE.

If then _TITLE implements IENUMBERABLE, it says _TITLE does not contain a definition for ADD and still getting conversion error.

Basically, I want to set the _TITLE properties with the data returned from Netflix. I have defined _TITLE to contain the fields I need, plus a collection of PERSON (for Cast).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

宛菡 2024-10-16 08:54:04

如果您的通用类型是 _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};

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

If your generic type is _TITLE, then you need to do select new _TITLE {Prop = Value}.

If you intend to use a generic type, then you need to use var:

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

So perhaps this is what you meant:

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

Something along those lines. var can be used even if you don't intend to use an anonymous type.

深白境迁sunset 2024-10-16 08:54:04

除了 vcsjones 的回答之外,您不需要在 _TITLE 上实现 IEnumerable 。发生的事情是,当你编写

var foo = new TYPENAME { a, b };

它时,它的意思是:

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

示例:

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

In addition to vcsjones's answer, You don't need to implement IEnumerable on _TITLE. What's going on is that when you write

var foo = new TYPENAME { a, b };

it means:

  1. create a new TYPENAME, which implements IEnumerable
  2. call foo.Add(a) then foo.Add(b);

Example:

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

As vcsjones mentioned, You need to use Parameter names when initializing an object, or perhaps you meant to use parentheses and call a constructor

var title = new _TITLE { Title = t.ID, Cast = t.Cast };
// or
var title = new _TITLE (t.ID, t.Cast);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文