0

我需要将整数列表传递给存储过程,因为实体框架需要很长的时间来处理请求。我正在使用用户定义表类型来执行此操作。我正在使用EntityFrameworkExtras.EF6,并创建了一个存储过程和Table Type类来帮助解决这个问题。下面是这些类:动态使用对象初始化器

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; } 



}} 

,这里是我的方法调用存储过程传入​​表型和返回我的对象​​的列表:

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创建新对象。是否有任何方法循环播放我的activityIDs列表并在每个记录的对象初始值设定项中创建新对象? 感谢

回答

1

你基本上是问如何映射(转换)List<int>List<ChartCountryUDT>,这在LINQ被称为投影(select):

var procedure = new ChartCountryStoredProcedure() 
{ 
    ChartCountryUDT = activityIDs.Select(id => new ChartCountryUDT { ID = id }).ToList() 
}; 
+0

这正是我需要的@IvanStoev。非常感谢你! – devguy