[英]Converting from IQueryable to IEnumerable
How do I convert from IQueryable
to IEnumerable
? 如何将
IQueryable
转换为IEnumerable
? I looked at another post Get from IQueryable to IEnumerable but it's not generic enough to reuse? 我看了另一篇文章《从IQueryable到IEnumerable》,但它不够通用,无法重用吗? Can anyone provides a generic reusable way to do this?
谁能提供一种通用的可重用方法来做到这一点?
public class SoftwareProductRepository
{
BitDatabaseEntities bitDB = new BitDatabaseEntities();
public IEnumerable<BuildMetrics> GetBuildMetrics()
{
var list = (from r in bitDB.bit_sanity_results select r);
return list;
}
}
Error message: 错误信息:
Cannot implictly converty type
'System.Linq.IQueryable<Dashboard.EntityFramework.bit_sanity_results>'
to'System.Collections.IEnumerable<Dashboard.Model.ApiModels.BuildMetrics>'
.An explicit conversion exists(are you missing a cast?)无法将类型
'System.Linq.IQueryable<Dashboard.EntityFramework.bit_sanity_results>'
隐式转换为'System.Collections.IEnumerable<Dashboard.Model.ApiModels.BuildMetrics>'
。存在显式转换(是否缺少转换?)
Try converting queryable to enumerable with this: 尝试使用以下方法将queryable转换为enumerable:
(from r in bitDB.bit_sanity_results select r).AsEnumerable();
This will give you an enumerable collection but I think you may have to generate BuildMetrics
objects from bit_sanity_results
that are returned by this. 这将为您提供一个可枚举的集合,但我认为您可能必须从
bit_sanity_results
返回的bit_sanity_results
生成BuildMetrics
对象。 Like: 喜欢:
(from r in bitDB.bit_sanity_results select new BuildMetrics{
<some BuildMetrics property>=r.<some bit_sanity_results property>
}).AsEnumerable();
Example 例
public class ReturnClass
{
public string SSId{get;set;}
public string Name{get;set;}
}
Table from which we select: 我们从中选择的表:
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;
}
}
}
The conversion in this case should actually be implicit as IQueryable<T>
implements IEnumerable<T>
. 这种情况下的转换实际上应该是隐式的,因为
IQueryable<T>
实现IEnumerable<T>
。
Your problem here is a type mismatch, as you are getting IQueryable<bit_sanity_results>
but are trying to return IEnumerable<BuildMetrics>
. 您的问题是类型不匹配,因为您正在获取
IQueryable<bit_sanity_results>
但正尝试返回IEnumerable<BuildMetrics>
。
You'd need to project the IQueryable<bit_sanity_results>
to IEnumerable<BuildMetrics>
. 您需要将
IQueryable<bit_sanity_results>
到IEnumerable<BuildMetrics>
。
Something like this: 像这样:
public class SoftwareProductRepository
{
BitDatabaseEntities bitDB = new BitDatabaseEntities();
public IEnumerable<BuildMetrics> GetBuildMetrics()
{
return bitDB.bit_sanity_results.Select(r => new BuildMetrics(...));
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.