代码之家  ›  专栏  ›  技术社区  ›  Mark Heath

使用LINQ向Netflix OData请求演员提供的所有标题

  •  0
  • Mark Heath  · 技术社区  · 14 年前

    from t in Titles 
    from p in t.Cast
    where p.Name == "Morgan Freeman"
    select t.Name
    

    这将导致:

    我也试过:

    from p in People
    from t in p.TitlesActedIn
    where p.Name == "Morgan Freeman"
    select t.Name
    

    1 回复  |  直到 14 年前
        1
  •  1
  •   Vitek Karas MSFT    14 年前

    您可以这样做:

    from p in People
    where p.Id == 190
    from t in p.TitlesActedIn
    select new { Name = t.Name }
    

    但请注意,这要求您不指定Id,这将转换为: /人物(190)/titleActedIn?$select=姓名

    如果需要基于非键属性进行筛选,则需要执行以下操作:

    from p in People
    where p.Name == "Morgan Freeman"
    select new Person {
        TitlesActedIn = p.TitlesActedIn
    }
    

    这意味着: /人物?$filter=Name eq'Morgan Freeman'&$expand=标题ActedIn

    您也可以只询问这些标题的名称,但是由于LinqPad生成的属性的类型,它似乎没有办法做到这一点。它看起来像:

    from p in People
    where p.Name == "Morgan Freeman"
    select new Person {
        TitlesActedIn = p.TitlesActedIn.Select(t => new Title { Name = t.Name })
    }
    

    也就是说:

    谢谢, 维泰克卡拉斯