public static string ExportCommentsOnPosts(InstagraphContext context) { var users = context.Users.Include(e => e.Posts).ThenInclude(e => e.Comments).ToArray(); var validUsers = new List <CommentsOnPostDto>(); foreach (var user in users) { int mostCommentsCount = user.Posts.Select(e => e.Comments.Count).ToArray().OrderByDescending(e => e).FirstOrDefault(); var validUser = new CommentsOnPostDto() { Username = user.Username, MostComments = mostCommentsCount }; validUsers.Add(validUser); } var result = validUsers.OrderByDescending(e => e.MostComments).ThenBy(e => e.Username); var xmlDoc = new XDocument(new XElement("users")); foreach (var user in result) { xmlDoc.Root.Add(new XElement("user", new XElement("Username", user.Username), new XElement("MostComments", user.MostComments))); } return(xmlDoc.ToString()); }
public static string ExportCommentsOnPosts(InstagraphContext context) { var users = context.Users .Include(u => u.Posts) .ThenInclude(p => p.Comments) .Select(u => new { Username = u.Username, MostComments = u.Posts .Select(p => p.Comments.Count) .ToArray() }) .ToArray(); var commentsOnPosts = new List <CommentsOnPostDto>(); foreach (var u in users) { var username = u.Username; var countOfPosts = 0; if (u.MostComments.Any()) // if there has any Comments { countOfPosts = u.MostComments.OrderByDescending(c => c).FirstOrDefault(); } var dto = new CommentsOnPostDto() { Username = username, MostComments = countOfPosts }; commentsOnPosts.Add(dto); } var orderedCommentsOnPosts = commentsOnPosts .OrderByDescending(cp => cp.MostComments) .ThenBy(cp => cp.Username); var xmlDoc = new XDocument(new XElement("user")); foreach (var cOnPost in orderedCommentsOnPosts) { xmlDoc.Root.Add(new XElement("user", new XElement("Username", cOnPost.Username), new XElement("MostComments", cOnPost.MostComments))); //// or //var user = new XElement("user"); //user.Add(new XElement("Username", cOnPost.Username)); //user.Add(new XElement("MostComments", cOnPost.MostComments)); //xmlDoc.Root.Add(user); } string xmlString = xmlDoc.ToString(); return(xmlString); }