2017-02-28 36 views
0

IQueryableIEnumerableに変換するにはどうすればよいですか?私は別のポストGet from IQueryable to IEnumerableを見ましたが、再利用するのに十分な汎用性はありませんか?誰でもこれを行うための汎用的な再利用可能な方法を提供できますか?IQueryableからIEnumerableに変換する

public class SoftwareProductRepository 
{ 
    BitDatabaseEntities bitDB = new BitDatabaseEntities(); 
    public IEnumerable<BuildMetrics> GetBuildMetrics() 
    { 

     var list = (from r in bitDB.bit_sanity_results select r); 

     return list; 
    } 
} 

エラーメッセージ:

ことができませんimplictly convertyタイプ 'System.Linq.IQueryable<Dashboard.EntityFramework.bit_sanity_results>' 'System.Collections.IEnumerable<Dashboard.Model.ApiModels.BuildMetrics>'に.Anに 明示的な変換は、この中に(?あなたはキャストが欠落している)

+0

あなたはこのスレッドを確認しました:http://stackoverflow.com/questions/ 14842176/convert-an-iqueryable-linq-query-to-iumerable-cancels-out-linq-optimized-wa –

+0

'.T oEnumerable() ' – TheVillageIdiot

+0

VillateIdiot - 正確にどこですか? – user3508811

答えて

3

これで列挙に照会可能に変換してみてください。

(from r in bitDB.bit_sanity_results select r).AsEnumerable(); 

は、これはあなたに列挙コレクションを与えるだろうが、私はあなたがbit_sanity_resultsからBuildMetricsオブジェクトを生成する必要があるかもしれないと思うことこれによって返されます。同様に:私たちが選択し、そこから

(from r in bitDB.bit_sanity_results select new BuildMetrics{ 
     <some BuildMetrics property>=r.<some bit_sanity_results property> 
     }).AsEnumerable(); 

public class ReturnClass 
{ 
    public string SSId{get;set;} 
    public string Name{get;set;} 
} 

表:

table values_store 
(
    ss_id varchar(50), 
    user_name varchar(250) 
) 

public class ReturnValuesRepository 
{ 
    public IEnumerable<ReturnClass> GetReturnClasses() 
    { 
     //As commented by @Enigmativity if your `BitDatabaseEntities` is `IDisposable` (sure if it inherits from `DbContext`) you should wrap it in a `using` block 
     using(var db = new ValuesEntities()) 
     { 
      var list = (from r in db.values_store select new 
        ReturnClass 
        { 
         SSId=r.ss_id, 
         Name=r.user_name 
        }).AsEnumerable(); 

      return list; 
     } 
    } 
} 
+0

これは暗黙的に 'System.Collections.Generic.List 'に変換することはできません。 。明示的な変換が存在します。 ' – user3508811

+0

'bit_sanity_results'や' BuildMetrics'クラスにどのようなプロパティがあるのか​​わかりません。しかし、あなたは 'select'ステートメントでオブジェクトを作成する必要があるというアイデアを得るでしょう。 – TheVillageIdiot

+2

@ TheVillageIdiot - クラスレベルの変数宣言として 'var'を使うことはできません。 – Enigmativity

1

変換が存在します大文字小文字は実際に暗黙的にIQueryable<T> implements IEnumerable<T>である必要があります。

IQueryable<bit_sanity_results>を取得していますが、IEnumerable<BuildMetrics>を返そうとしているため、タイプの不一致が発生しました。

IQueryable<bit_sanity_results>IEnumerable<BuildMetrics>に投影する必要があります。このような

何か:

public class SoftwareProductRepository 
{ 
    BitDatabaseEntities bitDB = new BitDatabaseEntities(); 
    public IEnumerable<BuildMetrics> GetBuildMetrics() 
    { 
     return bitDB.bit_sanity_results.Select(r => new BuildMetrics(...)); 
    } 
} 
+0

これは暗黙のうちに型 'System.Collections.Generic.List 'に変換できないというエラーをスローします。変換が存在します – user3508811

+1

@ user3508811これはまさにこの例を使用していないので、あなたが望むことをする正しい方法です。List myList = GetBuildMetrics() 'のようなことをしていると、 – Alisson

関連する問題