Microsoftは、Linqと呼ばれる.NETデータ処理言語の新しい学習しやすく、非常に強力で柔軟な拡張機能を提供しています。
複数レベルのアプリケーションで、オブジェクトのセットを取得するような方法でデータプロバイダーを設計する方法は?
たとえば 、 テーブル tbCustomers((Int64)CustID、(String)Name、(int32)Age) があり 、 Customers クラスがあり ます。
パブリック クラスの 顧客
{
private Int64 _CustID;
パブリック Int64 CustID
{
get { return _CustID; }
{_CustID = value ; }
}
プライベート ストリング _Name;
公開 文字列名
{
get { return _Name; }
{_Name = value ; }
}
// Int32型はnull可能
プライベート int32 ? _年齢;
パブリック Int32 ? 年齢
{
get { return _Age; }
{_Age = value ; }
}
// 初期化子
公開顧客()
{
}
パブリックカスタマー( Int64 CustID、 string Name、 Int32 ?Age)
{
_CustID = CustID;
_Name =名前;
_Age =年齢;
}
//データプロバイダーからオブジェクトのセットを取得します
public static List < 顧客 > GetCustomers()
{
リターン CustomersData .GetAllCustomers();
}
}
プロバイダーから Customers オブジェクトのセットを取得する必要があります
この問題の標準的な解決策はcです。 NET 2.0は System 名前空間の使用です 。 データ SqlClient :
パブリック 静的 クラス CustomersData
{
// SqlClient を使用する
public static List < 顧客 > GetAllCustomers()
{
リスト < 顧客 > lst = 新しい リスト < 顧客 >();
使用 ( SqlConnection conn = new SqlConnection ( "データソース= ..." ))
{
conn.Open();
SqlCommand cmd = new SqlCommand ( "SELECT CustID、Name、Age FROM tbCustomers" 、conn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
lst.Add( new Customers (( Int64 )reader [ “ CustID” ]、( String )reader [ “ Name” ]、( Int32 )?reader [ “ Age” ]);
}
}
return lst;
}
}
Linq を使用する場合、オブジェクト初期化子を使用して匿名型からデータセットを取得できます。
パブリック 静的 クラス CustomersData
{
// Linq を使用する
public static List < 顧客 > GetAllCustomers()
{
LinqDcDataContext db = new LinqDcDataContext ();
IEnumerable < 顧客 >結果= db.tbCustomers.Select(c => 新規 顧客 (c.CustID、c.Name、c.Age));
// IEnumerable <Customers> を リスト<Customers>に 追加
新しい リスト < 顧客 >(結果)を返します。
}
}
n層アーキテクチャに関する元のLinqの記事