У меня есть 2 таблицы сообщений (ID, заголовок, дата, время, тело) и теги (идентификатор, имя) (и теги сообщений (PostID, TagID)) и классы c #: PostModel.cs:
public class PostModel
{
[Key]
[Required]
public int ID { get; set; }
[Required]
public string Title { get; set; }
[Required]
public DateTime DateTime { get; set; }
[Required]
public string Body { get; set; }
public List<TagModel> Tags { get; set; }
public List<CommentModel> Comments { get; set; }
public List<LikeModel> Likes { get; set; }
}
TagModel.cs:
public class TagModel
{
[Key]
[Required]
public int ID { get; set; }
public string Name { get; set; }
public List<PostModel> Posts { get; set; }
}
Теперь я хочу перечислить все сообщения с определенным именем тега, скажем «даже». Итак, сначала я получаю TagID четного
query = "SELECT ID FROM Tags where [Name]='" + tagName + "'";
а затем получить сообщения с этим тегом
int tagId = int.Parse(dtTag.Rows[0][0].ToString());
query = "select [ID],[Title],[DateTime],[Body] from Posts inner join PostsTag on ID = PostID AND TagID =" + tagId;
, и теперь во вложенных циклах foreach я начинаю заполнять сообщение, но проблема в том, что я заполняю сообщение и его теги -> мне придется заполнять сообщения в классе тегов -> Мне нужно будет заполнить теги в классе сообщений -> Мне нужно будет заполнить сообщения в классе тегов и так далее.И если я не получаю, я получаю нулевую ссылку.Так как же изменить мои классы c #, чтобы это работало?
foreach (DataRow row1 in dtTag.Rows)
{
PostModel post = new PostModel();
post.Body = row1["Body"].ToString();
post.ID = int.Parse(row1["ID"].ToString());
post.DateTime = (DateTime)row1["DateTime"];
post.Title = row1["Title"].ToString();
int id1 = post.ID;
query = "SELECT [ID],[Name] FROM Tags as T inner join PostsTag as P on p.TagID=T.ID AND p.PostID=" + id1;
da = new SqlDataAdapter(query, sqlCon);
dtTag.Clear();
da.Fill(dtTag);
List<TagModel> tags = new List<TagModel>();
foreach (DataRow row in dtTag.Rows)
{
TagModel tag1 = new TagModel();
tag1.ID = int.Parse(row["ID"].ToString());
tag1.Name = row["Name"].ToString();
query = "select [ID],[Title],[DateTime],[Body] from Posts inner join PostsTag on ID = PostID AND TagID =" + tag1.ID;
// here I will need to fill tag1.Posts and after that post.tags and so on
tags.Add(tag1);
}
post.Tags = tags;
}
Примечание: я знаю, что это легче сделать с помощью Entity Framework, но мое требование к учителям - использовать ручные SQL-запросы.