1

一部のプロジェクトでmyGenerationを使用しました。BusinessEntity がクエリの結果を DataTable に保持していることに気付きましたが、開発者が結果をオブジェクトのリストとして取得したい場合はどうすればよいでしょうか? これを解決するために、私は自分で使用するために次の変更を加えました。

public  class BusinessEntity

{
    //....
    public DataTable TheDataTable
    {
        get
        {
            return _dataTable;
        }
        set
        {
            _dataTable = value;
        }
    }

    public void PutTheRow(DataRow pRow)
    {

        DataRow newRow = _dataTable.NewRow();
        newRow.ItemArray = pRow.ItemArray;
        _dataTable.Rows.Add(newRow);
        _dataRow = newRow;
        //Rewind();
        _dataTable.AcceptChanges();

    }

    .......


}

ここで、「従業員」というテーブルがあり、従業員用のクラスを生成するとします。また、次の変更を行います。

public abstract class Employee : _Employee
{
    public Employee()
    {

    }
    public List<Employee> AsList()
    {

        List<Employee> list = new List<Employee>();
        Employee businessEntity = null;
        foreach (System.Data.DataRow row in TheDataTable.Rows)
        {
            businessEntity = new Employee();
            businessEntity.TheDataTable = TheDataTable.Clone();
            businessEntity.PutTheRow(row);
            list.Add(businessEntity);


        }
        return list;
    }
}

これで、1 つのオブジェクトとデータ テーブルの結果ではなく、クエリの結果からオブジェクトのリストを取得できます。

Employee employee = new Employee();
    employee.Where.ID.Operator = WhereParameter.Operand.NotIn;
    employee.Where.ID.Value = "1,2,3";
    employee.Query.Load();
    foreach (Employee employeeLoop in employee.AsList())
    {
        TreeNode node = new TreeNode(employeeLoop.s_ID);
        node.Tag = employeeLoop;
        mMainTree.Nodes.Add(node);
}

次に、選択した従業員に次のようにアクセスできます。

Employee emp = (Employee) mMainTree.SelectedNode.Tag;
emp.Name = "WWWWW";
emp.Save();

ありがとう。より良いヒント、アイデアはありますか? 詳細については、MyGeneration フォーラムにアクセスしてください。

4

1 に答える 1

0

アイテムを 1 つだけ返す AsList() というメソッドを作成する理由は何ですか? このような一般的な拡張メソッドを作成するだけです (私の頭の上から作成された..):

public static List<T> AsList(this T item)
{
   return new List<T>() { item };
}

従業員リストをループして TreeNode に追加する意味はありません。

于 2010-06-22T17:21:49.103 に答える