4

データベース内のデータを取得する関数があります。以下はコードです。

        public DataTable getAllTransaction(OleDbConnection conn)
        {
            OleDbDataAdapter oleAdapter = new OleDbDataAdapter();
            string query = "";
            DataTable tblResult = new DataTable();

            query = @"SELECT t.id AS `Transaction ID`,
                                  c.id AS `Client ID`,
                                  c.clientname AS `Client Name`,
                                  t.cashvalue AS `Cash Value`,
                                  t.amount AS `Amount`,
                                  t.transdate AS `Transaction Date`,
                                  t.remarks AS `Remarks`
                             FROM client AS c 
                            INNER JOIN `transaction` AS t 
                               ON c.id=t.clientid";
            oleAdapter.SelectCommand = new OleDbCommand(query, conn);
            oleAdapter.Fill(tblResult);

            return tblResult;
        }

私の問題は、結果セットをモデルに保存する方法です (たとえば、DataTable を返したくない)。以下は私のモデルクラスです。

Class TransactionModel
{
    public int transID { get; set; }
    public int clientID { get; set; }
    public string clientName { get; set; }
    public double cashValue { get; set; }
    public double amout { get; set; }
    public DateTime transDate { get; set; }
    public string remarks { get; set; }
}
4

3 に答える 3

2

あなたは使用LINQして行うことができます:

var tranModel = from r in tblResult.Tables[0]
                select new TransactionModel 
                {
                   transId = r.Field<int>("transID"),
                   clientId = r.Field<int>("clientId"),
                   clientName = r.Field<string>("ClientName")
                }

.NET 2.0.LINQ を使用しているため、直接利用できないことに注意してください。次のようなものを使用する必要がありますLINQBridge: http://www.albahari.com/nutshell/linqbridge.aspx

もう 1 つの方法は、 のすべての行をループしtblResultて、 の一般的なリストを作成することですTransactionModel。例えば:

 List<TransactionModel> tModels = new List<TransactionModel>();
 foreach (var row in tblResult.Tables[0].Rows) 
 {
     tModels.Add(new TransactionModel 
                 {
                   transId = row["TransId"],
                   clientId = row["ClientId"],     
                   clientName = row["clientName"]
                 });
 }
于 2013-03-20T10:25:59.803 に答える
2

LINQ は .NET 2では使用できないため、項目を自分でループして、自分の型に変換する必要があります。このようなもの:

DataTable transactions = getAllTransactions();
List<TransactionModel> model = new List<TransactionModel>();

foreach (DataRow transaction in transactions.Rows)
{
    TransactionModel tran = new TransactionModel
                            {
                                transId = transaction.Field<int>("transID"),
                                clientId = transaction.Field<int>("clientId"),
                                clientName = transaction.Field<string>("ClientName")
                                //etc...
                            };

    model.Add(tran);
}
于 2013-03-20T11:05:16.433 に答える
1

次のようにします。

List<TransactionModel> TransactionItems = tblResult.AsEnumerable().Select(r => 
new TransactionModel
    {
        transID  = r.Field<int>("TransactionID"),
        clientID = r.Field<int>("clientID"),
        and so on.....
    }).ToList();

return items;
于 2013-03-20T10:28:48.747 に答える