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