C# 如何在列表/IEnumerable中添加从表中检索到的记录

C# 如何在列表/IEnumerable中添加从表中检索到的记录,c#,sql,winforms,ms-access,C#,Sql,Winforms,Ms Access,我正在尝试使用OleDbDataReader从MS Access 2010中的表中检索记录。在某些情况下,我从中检索记录的表对于提供的查询有多条记录。例如:两张桌子;Ist表有两列-一列是名称(主键),另一列包含数字。第二个表包含许多字段;一个是作为外键的名称字段。在某些情况下,我的查询匹配两个表中都返回一条记录的记录,但在其他情况下,第一个表中有一条记录,但第二个表中有许多记录。因此,我的datareader只提取填充文本框的记录之一。所以我想找到一种方法把这些多个记录放到一个列表框中,我在这

我正在尝试使用OleDbDataReader从MS Access 2010中的表中检索记录。在某些情况下,我从中检索记录的表对于提供的查询有多条记录。例如:两张桌子;Ist表有两列-一列是名称(主键),另一列包含数字。第二个表包含许多字段;一个是作为外键的名称字段。在某些情况下,我的查询匹配两个表中都返回一条记录的记录,但在其他情况下,第一个表中有一条记录,但第二个表中有许多记录。因此,我的datareader只提取填充文本框的记录之一。所以我想找到一种方法把这些多个记录放到一个列表框中,我在这个论坛上问了这个问题。给出的答案是使用LINQ并“将结果放入列表/IEnumerable”。我希望就这么简单。我试着将列表/IEnumerable和合并在一起,我不仅在倒退,而且变得越来越困惑。我的理解是,我必须创建一个全新的类、构造函数、方法集等,并创建一个可以采用任何类型(int、string等)的列表。这是正确的吗?我的新课是从什么开始的

public class myList : IEnumerable<T>
{
    public IEnumerable<T> GetEnumerator() 
    {
        foreach (object o in objects) 
        {
            yield return 0;
        }
    }
}

T是任何类型,而我会使用int或string

这有点让人困惑。。。 因此,表中基本上有一个父子关系。 我有一个非常好的办法,希望能解决你的问题。 这就是数据的读取方式

ArrayList rowList = new ArrayList();
SqlDataReader reader = storedProcCommand.ExecuteReader();
while (reader.Read())
{
   object[] values = new object[reader.FieldCount];
   reader.GetValues(values);
   rowList.Add(values);
}
这就是将值添加到ListView的方式

orderDetailsList.Items.Clear();

foreach (object[] row in rowList)
{
   string[] orderDetails = new string[row.Length];
   int columnIndex = 0;

   foreach (object column in row)
   {
        orderDetails[columnIndex++] = Convert.ToString(column);
   }

   ListViewItem newItem = new ListViewItem (orderDetails);
   orderDetailsList.Items.Add (newItem);
}
输出是这样的。。。

如果我没弄错,您希望从一个表(我称之为表2)中获取所有记录,其中名称与另一个表(表1)中一条记录上的名称匹配?我经常这样做,使用LINQ和SQL数据库

我假设你已经连接到数据库了。您是否创建了从表1检索所需记录的方法?如果是,您已经知道了名称。因此,我将创建另一种方法,如下所示:

public List<Table2> GetList(string name)
{
    List<Table2> list = new List<Table2>();
    list = db.Table2.Where(q => q.NameField = name).ToList();
    return list;
}
List<Table2> list = new List<Table2>();
list = GetList("This is the name from the Table1 data");
listviewcontrol.DataSource = list;
List<string> locations = new List<string>();
foreach (Table2 record in list)
{
    locations.Add(record.Location);
}
comboBox1.DataSource = locations;
public List GetList(字符串名称)
{
列表=新列表();
list=db.Table2.Where(q=>q.NameField=name).ToList();
退货清单;
}
然后,在填充控件时可以调用此方法,并将列表数据绑定到要显示列表的任何控件中。比如说:

public List<Table2> GetList(string name)
{
    List<Table2> list = new List<Table2>();
    list = db.Table2.Where(q => q.NameField = name).ToList();
    return list;
}
List<Table2> list = new List<Table2>();
list = GetList("This is the name from the Table1 data");
listviewcontrol.DataSource = list;
List<string> locations = new List<string>();
foreach (Table2 record in list)
{
    locations.Add(record.Location);
}
comboBox1.DataSource = locations;
List List=新列表();
list=GetList(“这是表1数据中的名称”);
listviewcontrol.DataSource=列表;
用数据填充控件的方法会有所不同,具体取决于您使用的控件。编辑:Rwiti有一些很好的代码用于将数据添加到listview

如果您只想显示Table2记录列表中的部分数据(例如,用于填充组合框的位置字段),我建议如下所示:

public List<Table2> GetList(string name)
{
    List<Table2> list = new List<Table2>();
    list = db.Table2.Where(q => q.NameField = name).ToList();
    return list;
}
List<Table2> list = new List<Table2>();
list = GetList("This is the name from the Table1 data");
listviewcontrol.DataSource = list;
List<string> locations = new List<string>();
foreach (Table2 record in list)
{
    locations.Add(record.Location);
}
comboBox1.DataSource = locations;
列表位置=新列表();
foreach(列表中的表2记录)
{
位置。添加(记录。位置);
}
comboBox1.DataSource=位置;

请重新格式化我的代码好吗?我刚刚尝试过,但最终得到的是
GetEnumerator
方法可能在任何类之外,而
while
方法肯定在任何方法之外。可能重复:我刚刚看了那篇文章“DatReader中的multiples表”…这是一个重复吗?甚至不接近。