0

Entity Frameworkが要求を処理するのに時間がかかりすぎるため、整数リストをストアドプロシージャに渡す必要があります。私はこれを行うためにユーザー定義のテーブルタイプを使用しています。私はEntityFrameworkExtras.EF6を使用しており、これを助けるためにストアドプロシージャとテーブルタイプクラスを作成しました。ここでは、これらのクラスは次のとおりです。あなたが私のChartCountryUDTオブジェクトに見ることができるようにオブジェクト初期化を動的に使用する

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

     } 

    } 

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



}} 

、ここでは、テーブルタイプを渡し、私にオブジェクトのリストを返すストアドプロシージャを呼び出すための私の方法であり、私はIDの値を1に設定することで、1つのオブジェクトをハードコーディングしています。これはうまくいきますが、渡されたactivityIDsパラメータを取得し、activityIDsパラメータの各IDのオブジェクト初期化子に新しいオブジェクトを作成したいと思います。 activityIDsのリストをループし、各レコードのオブジェクト初期化子に新しいオブジェクトを作成する方法はありますか?あなたは基本的にLINQに投影(select)と呼ばれる、List<ChartCountryUDT>List<int>(変換)をマッピングする方法を求めている おかげ

答えて

1

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

私は@IvanStoevを必要とするまさにです。どうもありがとうございます! – devguy

関連する問題