动态使用对象初始化器
Using Object Initializers dynamically
我需要将整数列表传递给存储过程,因为 Entity Framework 处理请求的时间太长。我正在使用用户定义的 Table 类型来执行此操作。我正在使用 EntityFrameworkExtras.EF6,我已经创建了一个存储过程并 Table 键入 class 来帮助解决这个问题。这是那些 classes:
namespace MyModel{
using EntityFrameworkExtras.EF6;
[UserDefinedTableType("SelectedActivity")]
public class ChartCountryUDT
{
[UserDefinedTableTypeColumn(1)]
public int ID { get; set; }
}
[StoredProcedure("GetCountryChartData")]
public class ChartCountryStoredProcedure
{
[StoredProcedureParameter(System.Data.SqlDbType.Udt, ParameterName = "ActivityIDs")]
public List<ChartCountryUDT> ChartCountryUDT { get; set; }
}}
这是我调用存储过程的方法,传入 Table 类型并返回对象列表:
public List<ChartCountry> GetCountriesForChart(List<int> activityIDs)
{
using (MyEntities ctx = new MyEntities())
{
var procedure = new ChartCountryStoredProcedure()
{
ChartCountryUDT = new List<ChartCountryUDT>()
{
new ChartCountryUDT() {ID = 1 }
}
};
return (List<ChartCountry>)ctx.Database.ExecuteStoredProcedure<ChartCountry>(procedure);
}
}
正如您在我的 ChartCountryUDT 对象初始值设定项中看到的那样,我通过将 ID 值设置为 1 来硬编码一个对象。这工作正常,但我想采用传入的 activityIDs 参数并在其中创建新对象activityIDs 参数中每个 ID 的对象初始值设定项。有没有什么方法可以循环遍历我的 activityID 列表并在我的对象初始值设定项中为每条记录创建新对象?
谢谢
您基本上是在问如何将 List<int>
映射(转换)为 List<ChartCountryUDT>
,这在 LINQ 中称为投影 (select
):
var procedure = new ChartCountryStoredProcedure()
{
ChartCountryUDT = activityIDs.Select(id => new ChartCountryUDT { ID = id }).ToList()
};
我需要将整数列表传递给存储过程,因为 Entity Framework 处理请求的时间太长。我正在使用用户定义的 Table 类型来执行此操作。我正在使用 EntityFrameworkExtras.EF6,我已经创建了一个存储过程并 Table 键入 class 来帮助解决这个问题。这是那些 classes:
namespace MyModel{
using EntityFrameworkExtras.EF6;
[UserDefinedTableType("SelectedActivity")]
public class ChartCountryUDT
{
[UserDefinedTableTypeColumn(1)]
public int ID { get; set; }
}
[StoredProcedure("GetCountryChartData")]
public class ChartCountryStoredProcedure
{
[StoredProcedureParameter(System.Data.SqlDbType.Udt, ParameterName = "ActivityIDs")]
public List<ChartCountryUDT> ChartCountryUDT { get; set; }
}}
这是我调用存储过程的方法,传入 Table 类型并返回对象列表:
public List<ChartCountry> GetCountriesForChart(List<int> activityIDs)
{
using (MyEntities ctx = new MyEntities())
{
var procedure = new ChartCountryStoredProcedure()
{
ChartCountryUDT = new List<ChartCountryUDT>()
{
new ChartCountryUDT() {ID = 1 }
}
};
return (List<ChartCountry>)ctx.Database.ExecuteStoredProcedure<ChartCountry>(procedure);
}
}
正如您在我的 ChartCountryUDT 对象初始值设定项中看到的那样,我通过将 ID 值设置为 1 来硬编码一个对象。这工作正常,但我想采用传入的 activityIDs 参数并在其中创建新对象activityIDs 参数中每个 ID 的对象初始值设定项。有没有什么方法可以循环遍历我的 activityID 列表并在我的对象初始值设定项中为每条记录创建新对象? 谢谢
您基本上是在问如何将 List<int>
映射(转换)为 List<ChartCountryUDT>
,这在 LINQ 中称为投影 (select
):
var procedure = new ChartCountryStoredProcedure()
{
ChartCountryUDT = activityIDs.Select(id => new ChartCountryUDT { ID = id }).ToList()
};