ホームページ > バックエンド開発 > C++ > DataReader を .NET のリストに効率的に変換するにはどうすればよいですか?

DataReader を .NET のリストに効率的に変換するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-16 22:17:09
オリジナル
980 人が閲覧しました

How Can I Efficiently Convert a DataReader into a List in .NET?

データを効率的に処理する: DataReader をリストに変換する

.NET 環境でデータを処理する場合、DataReader (前方読み取りのみを行うデータ ストリーム) を List など、より管理しやすい形式に変換することができます。この変換により、構造化データにより効率的にアクセスして処理できるようになります。

解決策: 拡張メソッド

変換する 1 つの方法は、拡張メソッドを使用することです。例は次のとおりです:

<code class="language-csharp">public static IEnumerable<T> Select<T>(this IDataReader reader,
                                       Func<IDataReader, T> projection)
{
    while (reader.Read())
    {
        yield return projection(reader);
    }
}</code>
ログイン後にコピー

この拡張メソッドを使用すると、射影関数を使用して DataReader からデータを選択し、それを IEnumerable に変換できます。

使用例

データをリストに変換するには、次のコードを使用できます:

<code class="language-csharp">using (IDataReader reader = ...)
{
    List<Customer> customers = reader.Select(r => new Customer {
        CustomerId = r["id"] is DBNull ? null : r["id"].ToString(),
        CustomerName = r["name"] is DBNull ? null : r["name"].ToString()
    }).ToList();
}</code>
ログイン後にコピー

この例では、DataReader の行を Customer オブジェクトのリストに変換します。

代替: エンティティ タイプに特化したメソッド

また、Customer エンティティに専用の静的メソッドを作成することもできます。

<code class="language-csharp">public static Customer FromDataReader(IDataReader reader) { ... }</code>
ログイン後にコピー

このメソッドは、DataReader 内のデータに基づいて Customer オブジェクトを作成します。

この方法を使用すると、変換プロセスを簡素化できます:

<code class="language-csharp">using (IDataReader reader = ...)
{
    List<Customer> customers = reader.Select<Customer>(Customer.FromDataReader)
                                     .ToList();
}</code>
ログイン後にコピー

これらの手法により、DataReader 内のデータを List に効率的に変換でき、それによって LINQ の機能を活用してさらなるデータ操作と処理を行うことができます。

以上がDataReader を .NET のリストに効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート