0

movieidでジャンルを返すLINQクエリを作成しようとしています。LINQはLINQPAD4で動作します。誰かが適切な構文で私を助けることができますか?次のエラーが発生します。

タイプ「System.Linq.IQueryable」を「System.Linq.IQueryable」に暗黙的に変換することはできません。明示的な変換が存在します(キャストがありませんか?)

タイプ「System.Collections.Generic.List」を「System.Collections.Generic.List」に暗黙的に変換することはできません

コード:(次の行でタイトルを括弧で囲んでいますが、実際にはコードでは角かっこです。

public List(Genre)GetGenresByMovieId(string movieid)
{
var genres = from t in MovieCatalog.Titles
where t.Id == "BVlLx"
select t.Genres; genres.ToList();を返します。
}

4

2 に答える 2

0

あなたの問題はあなたの予測です:

select new { Name = g.Name }

これは、クエリを匿名タイプに投影しています。

宣言したIQueryableに投影する必要があります(IQueryable<Genre>

LINQクエリを使用する場合は、暗黙的に型指定された変数(var)を使用することをお勧めします。

また、クエリに余分な「from」が含まれている理由がわからない場合は、それは必要ありません。

このようなものが機能するはずです:

var genres = from t in MovieCatalog.Titles
             where t.Id = "BVlLx"
             select t.Genres;

return genres.ToList();

var genresに入力する必要がありIQueryable<Genre>ます。

これは、Genreオブジェクトのコレクションを返したいことを前提としています。

名前だけが必要な場合は、次のようにします。

select t.Genres.Name

ただし、これは文字列オブジェクトのコレクションを返します(そしてvar genresに入力する必要がありますIQueryable<string>)。

ただし、NetFlix OData APIについてはわかりませんが、それで正しい方向に進むはずです。

于 2010-10-14T02:34:35.487 に答える
0

正しいクエリは次のようになります

public IEnumerable<Genre> GetGenresByMovieId(string movieId)
{
    return from title in ctx.Titles
           from genre in title.Genres
           where title.Id == "BVlLx"
           select genre;
}

メソッド呼び出し構文では、SelectではなくSelectManyを使用する必要があります。これは、タイトルのフィルターがタイトルのリストを返すため(常に1つのタイトルのみが含まれますが、コンパイラーはそれを認識しません)、「連結」する必要があるためです。 「結果の各タイトルのすべてのジャンル。

戻り値の型は実際にはIQueryableですが、それを列挙するだけの場合は、IEnumerableを使用するか、ToList()を呼び出して、メソッド内でその場で実行を強制できます(私が記述した方法では、クエリは実際に一度だけ実行されますそれを列挙する)。

于 2010-10-14T06:13:48.307 に答える