更新列表,包含另一个列表

时间:2013-10-29 15:58:29

标签: c# linq sql-server-2008 list

我有一个名为users类型User的列表。用户类具有属性Id, Name, Location, List<string>MyWall,List<User> FriendList。有三个表

User(UserId(PK),Name,Location), 
UserPost(PostID(PK),UserID(FK),WallText), 
UserFriends (UFId (PK),FriendID(FK),UserID(FK))

我首先通过询问名称和位置的详细信息来创建新用户。然后将这些详细信息插入到User table中,在从数据库中读取这些详细信息后,我将它们存储到List<User> users = new List<User>()中,以便我可以进一步使用此列表进行显示,而不是从数据库中获取数据

直到这里一切正常。现在,在创建用户之后,我要求用户在他的墙上写帖子(可以是多个帖子),并将这些详细信息插入UserPost table。此外,我从数据库中获取与用户ID相对应的用户帖子,现在我希望这些帖子在users列表中更新,但是当我添加墙帖(users.Add(user))时,整个用户详细信息将作为新用户添加。 请告诉我如何使用Wall Posts更新我的users列表,与现有用户详细信息相对应。

我的代码 -

这里我将没有WallPost的用户详细信息添加到用户列表 -

private void DisplayAllUsers()
        {
            connection.Open();
            SqlCommand command = new SqlCommand("DisplayUsers", connection);
            using (SqlDataReader reader = command.ExecuteReader())
            {
                command.CommandType = CommandType.StoredProcedure;

                Console.WriteLine("Details of all the Users: ");
                while (reader.Read())
                {
                    User user = new User()
                    {
                        ID = int.Parse(reader["UserId"].ToString()),
                        Name = reader["Name"].ToString(),
                        Location = reader["Location"].ToString()
                    };
                    users.Add(user);
                    Console.WriteLine();
                    Console.WriteLine("ID: " + user.ID + " Name: " + user.Name + " Location: " + user.Location);
                }
            } 

显示墙方法(这里我必须更新用户列表) -

private void DisplayWall(User user)
        {
            OnDisplayDetails(user);
            connection.Open();
            SqlCommand command = new SqlCommand("select WallText from UserPost where UserID='"+ user.ID +"'", connection);
            using (SqlDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    Console.WriteLine(user.Name + " says " + reader["WallText"]);
                }
                int count = users.Count;
//This LINQ doesn't work because MyWall is of type List<string>
                //(from u in users
                // where u.ID == user.ID
                // select u).ToList().ForEach(u => u.MyWall = //reader["WallText"]);
                //Here While Adding the User Details to the users list, it gets added with //all the details 
                   users.Add(user);
            }
            connection.Close();
        }

1 个答案:

答案 0 :(得分:3)

读取循环中的user.MyWall.Add(reader["WallText"])怎么样?您可能想要在添加之前检查帖子是否已经在列表中。