2017-02-16 123 views
1

我确信这个问题已经被回答过了,但我真的不知道如何找到答案,而且我的搜索没有取得任何结果;通过关闭主题并指向正确的问题/答案,可以自由地回答这个问题。实例化一个对象的列表

比方说,我有一个班级代表我的组织成员。该类有一个构造函数来实例化Member对象,并将参数作为成员ID,并执行数据库调用以返回表示该成员的行以及我感兴趣的成员的任何属性。

获取成员列表的正确协议是什么?

我的数据库查询很简单 - 我有一个存储过程,它将返回我有兴趣获取的成员列表。但是,我如何在应用程序级别上表示呢?

现在,我有一个Member对象的构造函数,它将DataRow作为输入,并指定Member对象的所有相关属性。然后我做了以下内容:

public static List<member> getList() 
{ 
    DataTable dt = GetMemberList(); 
    List<member> memberList = new List<member>() 
    foreach (DataRow dr in dt.Rows) memberList.Add(new member(dr)); 
    return memberList; 
} 
+1

这一切都取决于你的意思是“正确”。 –

+1

什么是GetMemberList()返回?这可能会使用linq在几行代码中完成。 –

+0

GetMemberList正在返回一个DataTable对象,DataTable中的每一行代表我的数据库中的成员表中的一行。 –

回答

0

目前你在做什么没有任何问题。

 DataTable dt = GetMemberList(); 
     List<Member> memberList = new List<Member>(); 
     foreach (DataRow dr in dt.Rows) 
     { 
      memberList.Add(new Member(dr)); 
     } 
0

我不知道你的会员(我建议使用你的类资本M)级的样子,但你可以有你的类的构造函数采取的DataRow作为参数并像这样填充你的属性:(我在这里假设属性名称和数据库列名称)。

public class Member 
{ 
    public Member(DataRow dataRow) 
    { 
     MemberID = Convert.ToInt32(dataRow["MemberID"]); 
     MemberName = Convert.ToString(dataRow["MemberName"]); 
    } 

    public int MemberID { get; set; } 
    public string MemberName { get; set; } 
} 

不是最好的解决方案,但这应该与你提供的代码一起工作。

+0

这正是我目前正在做的 - 但我更感兴趣知道如何/在哪里我应该把代码实际上获取DataTable,我正在迭代创建每个成员对象 –

+0

在阅读您的评论后,我可以提出我会如何做到这一点的建议。我把所有的数据库调用都放在静态类中,它们返回一个对象列表(在你的情况下,该方法将返回'List '。因此,不要返回'DataTable',而是在方法调用中使用它来创建'Member'对象并把它们放回列表中,希望这会有所帮助。 – DanHarrigan

1

GetMemberList在这里做的工作,getList只是一个抽象。你在说什么虽然是一个问题的分离。通常这是通过将数据库分离出来的一个项目来完成的,通常称为n层结构。

根据您所询问的内容,此结构将包含处理数据库交互的数据访问层(DAL);一个服务层,它能够操纵DAL的输入和输出,然后将这些数据返回给调用者;和一个业务逻辑层,它将决定进行哪些服务调用以及如何组合返回的数据。

你如何极大地实现该结构取决于以下几个因素:项目的

  • 大小(这是为小型企业或每个人)
  • 大小团队的(它只是你或者是有不少开发商参与)
  • 测试(有没有什么测试,以及有多大的覆盖)
  • 时间表可用(它需要做的这个星期)的数据
  • 灵敏度(你处理财务数据)
  • 个人喜好(制表符或空格或代码牛仔)

最佳实践将取决于这些因素如何排队决定不同的东西。如果仅仅是你,那么它就更加开放。如果是一个团队,那么他们可能已经有了这种类型的指导。

我会建议至少使用数据访问层和服务层。