C# 获取列表<;对象>;来自sql public List Getmonan() { 字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString; 列表菜单列表=新列表(); 菜单=新菜单(); 使用(SqlConnection conn=newsqlconnection(cs)) { SqlCommand cmd=新的SqlCommand(“Getmenu”,conn); cmd.CommandType=CommandType.storedProcess; conn.Open(); SqlDataReader=cmd.ExecuteReader(); while(reader.Read()) { menu.Tenmon=reader[“Tenmon”].ToString(); menu.Loaimon=reader[“Loaimon”].ToString(); 菜单列表。添加(菜单); } } 返回菜单列表; }

C# 获取列表<;对象>;来自sql public List Getmonan() { 字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString; 列表菜单列表=新列表(); 菜单=新菜单(); 使用(SqlConnection conn=newsqlconnection(cs)) { SqlCommand cmd=新的SqlCommand(“Getmenu”,conn); cmd.CommandType=CommandType.storedProcess; conn.Open(); SqlDataReader=cmd.ExecuteReader(); while(reader.Read()) { menu.Tenmon=reader[“Tenmon”].ToString(); menu.Loaimon=reader[“Loaimon”].ToString(); 菜单列表。添加(菜单); } } 返回菜单列表; },c#,sql-server,wcf,C#,Sql Server,Wcf,我的过程和sql结果: 我的WCF测试客户端结果: 我的代码怎么了?为什么我在菜单列表中得到相同的菜?您必须在循环中创建新菜单 您基本上是创建一个对象,在循环中更改几次,然后将其添加到列表中。它将生成一个列表,其中所有元素都是同一数据段 public List<Menu> Getmonan() { string cs = ConfigurationManager.ConnectionStrings["RestaurantConnection"].Connec

我的过程和sql结果:

我的WCF测试客户端结果:
我的代码怎么了?为什么我在菜单列表中得到相同的菜?

您必须在循环中创建新菜单

您基本上是创建一个对象,在循环中更改几次,然后将其添加到列表中。它将生成一个列表,其中所有元素都是同一数据段

public List<Menu> Getmonan()
    {
        string cs = ConfigurationManager.ConnectionStrings["RestaurantConnection"].ConnectionString;
        List<Menu> menulist = new List<Menu>();
        Menu menu = new Menu();
        using (SqlConnection conn = new SqlConnection(cs))
        {
            SqlCommand cmd = new SqlCommand("Getmenu", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            while(reader.Read())
            {
                menu.Tenmon = reader["TenMon"].ToString();
                menu.Loaimon = reader["LoaiMon"].ToString();
                menulist.Add(menu);
            }

        }

        return menulist;
    }
public List Getmonan()
{
字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString;
列表菜单列表=新列表();
使用(SqlConnection conn=newsqlconnection(cs))
{
SqlCommand cmd=新的SqlCommand(“Getmenu”,conn);
cmd.CommandType=CommandType.storedProcess;
conn.Open();
SqlDataReader=cmd.ExecuteReader();
while(reader.Read())
{
菜单=新菜单();
menu.Tenmon=reader[“Tenmon”].ToString();
menu.Loaimon=reader[“Loaimon”].ToString();
菜单列表。添加(菜单);
}
}
返回菜单列表;
}

您必须在循环中创建新菜单

您基本上是创建一个对象,在循环中更改几次,然后将其添加到列表中。它将生成一个列表,其中所有元素都是同一数据段

public List<Menu> Getmonan()
    {
        string cs = ConfigurationManager.ConnectionStrings["RestaurantConnection"].ConnectionString;
        List<Menu> menulist = new List<Menu>();
        Menu menu = new Menu();
        using (SqlConnection conn = new SqlConnection(cs))
        {
            SqlCommand cmd = new SqlCommand("Getmenu", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            while(reader.Read())
            {
                menu.Tenmon = reader["TenMon"].ToString();
                menu.Loaimon = reader["LoaiMon"].ToString();
                menulist.Add(menu);
            }

        }

        return menulist;
    }
public List Getmonan()
{
字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString;
列表菜单列表=新列表();
使用(SqlConnection conn=newsqlconnection(cs))
{
SqlCommand cmd=新的SqlCommand(“Getmenu”,conn);
cmd.CommandType=CommandType.storedProcess;
conn.Open();
SqlDataReader=cmd.ExecuteReader();
while(reader.Read())
{
菜单=新菜单();
menu.Tenmon=reader[“Tenmon”].ToString();
menu.Loaimon=reader[“Loaimon”].ToString();
菜单列表。添加(菜单);
}
}
返回菜单列表;
}

正如我和大家所指出的


列表中的每一项都需要一个新菜单,否则您将更新同一项,但会重复将其添加到列表中,这样您就可以得到同一项的多个副本。

正如我和各位所指出的那样


列表中的每个项目都需要一个新菜单,否则您将更新同一项目,但会重复将其添加到列表中,这样您就可以得到同一项目的多个副本。

您需要创建多个对象,而不是覆盖旧对象:

public List<Menu> Getmonan()
    {
        string cs = ConfigurationManager.ConnectionStrings["RestaurantConnection"].ConnectionString;
        List<Menu> menulist = new List<Menu>();

        using (SqlConnection conn = new SqlConnection(cs))
        {
            SqlCommand cmd = new SqlCommand("Getmenu", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            while(reader.Read())
            {
                Menu menu = new Menu();
                menu.Tenmon = reader["TenMon"].ToString();
                menu.Loaimon = reader["LoaiMon"].ToString();
                menulist.Add(menu);
            }

        }

        return menulist;
    }
public List Getmonan()
{
字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString;
列表菜单列表=新列表();

//Menu Menu=new Menu();//您需要创建多个对象,而不是覆盖旧对象:

public List<Menu> Getmonan()
    {
        string cs = ConfigurationManager.ConnectionStrings["RestaurantConnection"].ConnectionString;
        List<Menu> menulist = new List<Menu>();

        using (SqlConnection conn = new SqlConnection(cs))
        {
            SqlCommand cmd = new SqlCommand("Getmenu", conn);
            cmd.CommandType = CommandType.StoredProcedure;
            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            while(reader.Read())
            {
                Menu menu = new Menu();
                menu.Tenmon = reader["TenMon"].ToString();
                menu.Loaimon = reader["LoaiMon"].ToString();
                menulist.Add(menu);
            }

        }

        return menulist;
    }
public List Getmonan()
{
字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString;
列表菜单列表=新列表();
//Menu Menu=new Menu();//这应该可以:

public List<Menu> Getmonan()
{
    string cs = ConfigurationManager.ConnectionStrings["RestaurantConnection"].ConnectionString;
    List<Menu> menulist = new List<Menu>();
    // Menu menu = new Menu();  // <--- remove this!!
    using (SqlConnection conn = new SqlConnection(cs))
    {
        SqlCommand cmd = new SqlCommand("Getmenu", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        conn.Open();
        SqlDataReader reader = cmd.ExecuteReader();
        while(reader.Read())
        {
            Menu menu = new Menu();   // <--- put it here...
            menu.Tenmon = reader["TenMon"].ToString();
            menu.Loaimon = reader["LoaiMon"].ToString();
            menulist.Add(menu);
        }

    }

    return menulist;
}
public List Getmonan()
{
字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString;
列表菜单列表=新列表();
使用(SqlConnection conn=newsqlconnection(cs))
{
SqlCommand cmd=新的SqlCommand(“Getmenu”,conn);
cmd.CommandType=CommandType.storedProcess;
conn.Open();
使用(SqlDataReader sdr=cmd.ExecuteReader())
{
while(sdr.Read())
{
菜单菜单=新菜单()
{
Tenmon=sdr.GetString(列索引);
Loaimon=sdr.GetString(列索引);
};
菜单列表。添加(菜单);
}
}
}
返回菜单列表;
}
这应该可以:

public List<Menu> Getmonan()
{
    string cs = ConfigurationManager.ConnectionStrings["RestaurantConnection"].ConnectionString;
    List<Menu> menulist = new List<Menu>();
    // Menu menu = new Menu();  // <--- remove this!!
    using (SqlConnection conn = new SqlConnection(cs))
    {
        SqlCommand cmd = new SqlCommand("Getmenu", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        conn.Open();
        SqlDataReader reader = cmd.ExecuteReader();
        while(reader.Read())
        {
            Menu menu = new Menu();   // <--- put it here...
            menu.Tenmon = reader["TenMon"].ToString();
            menu.Loaimon = reader["LoaiMon"].ToString();
            menulist.Add(menu);
        }

    }

    return menulist;
}
public List Getmonan()
{
字符串cs=ConfigurationManager.ConnectionString[“RestaurantConnection”].ConnectionString;
列表菜单列表=新列表();
使用(SqlConnection conn=newsqlconnection(cs))
{
SqlCommand cmd=新的SqlCommand(“Getmenu”,conn);
cmd.CommandType=CommandType.storedProcess;
conn.Open();
使用(SqlDataReader sdr=cmd.ExecuteReader())
{
while(sdr.Read())
{
菜单菜单=新菜单()
{
Tenmon=sdr.GetString(列索引);
Loaimon=sdr.GetString(列索引);
};
菜单列表。添加(菜单);
}
}
}
返回菜单列表;
}

每次读取循环中的新行时,您都需要创建一个新菜单,而您需要不断为同一菜单项的属性赋值,然后重复将该项添加到列表中。请执行类似操作:
while(reader.read()){menulist.add(新菜单{Tenmon=reader[“Tenmon”].ToString(),Loaimon=reader[“Loaimon”].ToString())};}
@BugFinder-thk它起作用了每次读取循环中的新行时,您都需要创建一个新菜单,同时继续为属性赋值