2017-02-28 47 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