我在一些项目中使用了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();
}
.......
}现在假设我们有一个表"Employee“,我们为他生成了一个类,我还做了以下修改:
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;
}
}现在,我可以从查询结果中获得一个对象列表,而不是数据表中的一个对象和结果:
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论坛。
发布于 2010-06-23 01:21:49
为什么要创建一个只返回一项的名为AsList()的方法呢?您可以像这样创建一个通用的扩展方法(从我的头顶创建):
public static List<T> AsList(this T item)
{
return new List<T>() { item };
}不需要遍历1的员工列表来将其添加到TreeNode。
https://stackoverflow.com/questions/2349198
复制相似问题