2017-02-28 73 views
0

如何將IQueryable轉換爲IEnumerable?我看了另一篇文章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 -ienumerablet-cancellation-out-linq-optimized-wa –

+0

嘗試'.T oEnumerable()'。 – TheVillageIdiot

+0

The 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