C# 从IQueryable转换为IEnumerable
如何从C# 从IQueryable转换为IEnumerable,c#,C#,如何从IQueryable转换为IEnumerable?我看了另一篇文章,但它不够通用,不能重复使用?有人能提供一种通用的可重用方法来实现这一点吗 public class SoftwareProductRepository { BitDatabaseEntities bitDB = new BitDatabaseEntities(); public IEnumerable<BuildMetrics> GetBuildMetrics() {
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;
}
}
公共类SoftwareProductRepository
{
BitDatabaseEntities bitDB=新的BitDatabaseEntities();
公共IEnumerable GetBuildMetrics()
{
var list=(从bitDB.bit_健全性_结果中的r选择r);
退货清单;
}
}
错误消息:
无法隐式转换类型
“System.Linq.IQueryable”
到
'System.Collections.IEnumerable'
.An
存在显式转换(是否缺少强制转换?)
这种情况下的转换实际上应该是隐式的 这里的问题是类型不匹配,因为您得到的是
IQueryable
,但试图返回IEnumerable
您需要将IQueryable
投影到IEnumerable
大概是这样的:
public class SoftwareProductRepository
{
BitDatabaseEntities bitDB = new BitDatabaseEntities();
public IEnumerable<BuildMetrics> GetBuildMetrics()
{
return bitDB.bit_sanity_results.Select(r => new BuildMetrics(...));
}
}
公共类SoftwareProductRepository
{
BitDatabaseEntities bitDB=新的BitDatabaseEntities();
公共IEnumerable GetBuildMetrics()
{
返回bitDB.bit_sanity_结果。选择(r=>newbuildmetrics(…);
}
}
这种情况下的转换实际上应该是隐式的
这里的问题是类型不匹配,因为您得到的是IQueryable
,但试图返回IEnumerable
您需要将IQueryable
投影到IEnumerable
大概是这样的:
public class SoftwareProductRepository
{
BitDatabaseEntities bitDB = new BitDatabaseEntities();
public IEnumerable<BuildMetrics> GetBuildMetrics()
{
return bitDB.bit_sanity_results.Select(r => new BuildMetrics(...));
}
}
公共类SoftwareProductRepository
{
BitDatabaseEntities bitDB=新的BitDatabaseEntities();
公共IEnumerable GetBuildMetrics()
{
返回bitDB.bit_sanity_结果。选择(r=>newbuildmetrics(…);
}
}
尝试使用以下方法将可查询转换为可枚举:
(from r in bitDB.bit_sanity_results select r).AsEnumerable();
这将为您提供一个可枚举的集合,但我认为您可能必须从该集合返回的bit\u sanity\u结果生成BuildMetrics
对象。比如:
(from r in bitDB.bit_sanity_results select new BuildMetrics{
<some BuildMetrics property>=r.<some bit_sanity_results property>
}).AsEnumerable();
我们从中选择的表格:
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;
}
}
}
表值\u存储
(
ss_id varchar(50),
用户名varchar(250)
)
公共类返回值存储
{
公共IEnumerable GetReturnClasses()
{
//正如@Enigmativity所评论的,如果您的“BitDatabaseEntities”是“IDisposable”(当然,如果它继承自“DbContext”),您应该将其包装在“using”块中
使用(var db=new valuesenties())
{
var list=(从db.values\u存储区中的r选择new
返回舱
{
SSId=r.ss_id,
Name=r.user\u Name
}).AsEnumerable();
退货清单;
}
}
}
尝试使用以下方法将可查询转换为可枚举:
(from r in bitDB.bit_sanity_results select r).AsEnumerable();
这将为您提供一个可枚举的集合,但我认为您可能必须从该集合返回的bit\u sanity\u结果生成BuildMetrics
对象。比如:
(from r in bitDB.bit_sanity_results select new BuildMetrics{
<some BuildMetrics property>=r.<some bit_sanity_results property>
}).AsEnumerable();
我们从中选择的表格:
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;
}
}
}
表值\u存储
(
ss_id varchar(50),
用户名varchar(250)
)
公共类返回值存储
{
公共IEnumerable GetReturnClasses()
{
//正如@Enigmativity所评论的,如果您的“BitDatabaseEntities”是“IDisposable”(当然,如果它继承自“DbContext”),您应该将其包装在“using”块中
使用(var db=new valuesenties())
{
var list=(从db.values\u存储区中的r选择new
返回舱
{
SSId=r.ss_id,
Name=r.user\u Name
}).AsEnumerable();
退货清单;
}
}
}
你检查过这个线程了吗:试试.ToEnumerable()
。VillateIdiot-确切位置?只是一个旁注-您知道BitDatabaseEntities
是一个IDisposable
,因此您需要使SoftwareProductRepository
也成为一个IDisposable
吗?您检查过这个线程了吗:try.ToEnumerable()
。VillateIdiot-确切位置?只是一个旁注-您知道BitDatabaseEntities
是一个IDisposable
,因此您需要将SoftwareProductRepository
也设置为IDisposable
吗?这会引发一个错误无法隐式转换类型“System.Collections.Generic”。List@user3508811所以你没有使用这个例子。这是做你想做的事的正确方法。如果您正在执行类似于List myList=GetBuildMetrics()
的操作,它将抛出您所说的错误。这将抛出一个错误无法隐式转换类型“System.Collections.Generic”。List@user3508811所以你没有使用这个例子。这是做你想做的事的正确方法。如果您正在执行类似于List myList=GetBuildMetrics()
的操作,它将抛出您所说的错误。这将抛出一个错误`“无法隐式转换类型'System.Collections.Generic.list我不知道bit\u sanity\u结果
或BuildMetrics
类中有哪些属性。但是您会发现,您需要在select
语句中创建对象。@VillageDiot-您不能将var
作为类级变量声明。@VillageDiot也不需要在任何地方使用.AsEnumerable()
,因为IQueryable
已经实现了它。Enigmativity-你能对你的评论有更多的了解吗?@TheVillageIdiot-你关注Enigmativity评论吗?这会抛出一个错误`“无法隐式转换类型'System.Collections.Generic.list我不知道bit\u sanity\u结果
或BuildMetrics
类中有哪些属性。但您会发现需要在select
语句中创建对象。@Villageidiot-不能将var
作为类级变量声明。@Villageidiot也不需要使用