web-dev-qa-db-ja.com

タイプ 'System.Collections.Generic.List <String>'を 'System.Collections.Generic.IEnumerable <turon.Model.Products_Products>に暗黙的に変換することはできません

public IEnumerable<Products_Products> getprod()
{
    var db = new Model.atengturonDBEntities();
    IEnumerable<Products_Products> x = new List<Products_Products>();
    var test = (from name in db.Products_Products select 
                    name.ProductName).ToList();
    x = test;
    return x;
}

なぜこのエラーが発生するのですか?また、すべての「IEnumerable」を「List」に変更しようとしました。助けてください。ありがとう:)

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

3
RE0824C

エラーメッセージは非常に明確です。 _name.ProductName_を選択しているため、LINQクエリはstringのコレクションを返しますが、メソッドは_Products_Products_のコレクションを返すように宣言されています。

LINQクエリを変更して、ProductNameだけでなく製品自体も返すようにします。

_IEnumerable<Products_Products> x = new List<Products_Products>();
var test = (from name in db.Products_Products select 
                name).ToList();
_

db.Products_Products.ToList()だけに置き換えることもできます。

または、メソッドを変更して_IEnumerable<string>_を返します

_public IEnumerable<string> getprod()
_
5
MarcinJuraszek

Lambada式は、各製品からProductNameを取得し、それを文字列のコレクションとして収集します。次のように変更することをお勧めします。

return (from name in db.Products_Products select 
             name).ToList();
2
Lior Ben Aharon

.FirstOrDefaultまたはFirstを使用できます。常に問題を解決します。

2
Mostafa Bouzari