我有一个名为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
从数据库中读取这些详细信息之后,我将它们存储到 aList<User> users = new List<User>()
中,以便我可以进一步使用此列表进行显示,而不是从数据库中获取数据。
到这里一切正常。现在创建用户后,我要求用户在他的墙上写帖子(可以是多个帖子),并将这些详细信息插入到UserPost table
. 此外,我正在从与用户 ID 对应的数据库中获取用户的帖子,现在我希望这些帖子在users
列表中得到更新,但是当我添加墙帖 ( users.Add(user)
) 时,整个用户详细信息将作为新用户添加。请告诉我如何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();
}