私はコードサンプルを作成しています。彼らはプレーンな古いADO.NETを使用します。それらには、1レコードを戻すReadという汎用関数があります。ここでは、コードは次のようになります。1レコードを返すための一般的な検索方法の作成
public static T Read<T>(string storedProcedure, Func<IDataReader, T> make, object[] parms = null)
{
using (SqlConnection connection = new SqlConnection())
{
connection.ConnectionString = connectionString;
using (SqlCommand command = new SqlCommand())
{
command.Connection = connection;
command.CommandType = CommandType.StoredProcedure;
command.CommandText = storedProcedure;
command.SetParameters(parms);
connection.Open();
T t = default(T);
var reader = command.ExecuteReader();
if (reader.Read())
t = make(reader);
return t;
}
}
}
なぜ私にはわからない:彼らはメソッドのシグネチャの一部としてFunc<IDataReader, T> make
使用
- ?このようにするのは効率的ですか?これを行うにはよりよい方法/ベストプラクティスがありますか?
- 私は理解していません
T t = default(T);
?このようにするのは効率的ですか?これを行うにはよりよい方法/ベストプラクティスがありますか? t = make(reader);
は何をしますか?このようにするのは効率的ですか?これを行うにはよりよい方法/ベストプラクティスがありますか?
呼び出し元の関数は次のようなものになります。
public Customer GetCustomer(int customerId)
{
// Other code here
string storedProcedure = "MyStoredProcedure";
object[] parameters = { "@CustomerId", customerId };
return Db.Read(storedProcedure, Make, parameters);
}
private static Func<IDataReader, Customer> Make = reader =>
new Customer
{
CustomerId = reader["CustomerId"].AsId(),
Company = reader["CompanyName"].AsString(),
City = reader["City"].AsString
};
を私はFunc Make
部分を理解していませんか?誰かがここで何が起こっているのか、これが良い習慣なら私に説明してもらえますか?変更があれば幸いですが、詳細なサンプルコードを提供してください:)