Mamy takie oto zapytanie LINQ:
public ProfileDTO GetProfileByUserID(int id)
{
var profile = _databaseContext
.Users.Where(user => user.ID == id)
.Select(user => new ProfileDTO()
{
JoinTime = user.JoinTime,
PostsCount = user.Posts.Count(),
PostsPerDay = user.Posts.Count() / (float)(DateTime.Now - user.JoinTime).TotalDays,
PercentageOfAllPosts = (float)user.Posts.Count() / _databaseContext.Posts.Count(),
MostActiveTopicName = user.Posts.GroupBy(post => post.Topic.ID)
.OrderByDescending(post => post.Count())
.SelectMany(p => p, (group, post) => post)
.First().Topic.Name,
MostActiveTopicAlias = user.Posts.GroupBy(post => post.Topic.ID)
.OrderByDescending(post => post.Count())
.SelectMany(p => p, (group, post) => post)
.First().Topic.Alias,
MostActiveCategoryName = user.Posts.GroupBy(post => post.Topic.ID)
.OrderByDescending(post => post.Count())
.SelectMany(p => p, (group, post) => post)
.First().Topic.Category.Name,
MostActiveCategoryAlias = user.Posts.GroupBy(post => post.Topic.ID)
.OrderByDescending(post => post.Count())
.SelectMany(p => p, (group, post) => post)
.First().Topic.Category.Alias
}).Single();
return profile;
}
Sam nie wierzę, że stworzyłem to arcydzieło w nocy, ale do rzeczy. Zapytanie to ma zwrócić dane o profilu użytkownika forum, czyli między innymi liczbę postów oraz nazwę i alias wątku i kategorii w których był najbardziej aktywny (tj. wysłał najwięcej postów).
Czy tak zawiłe zapytania to coś, co nie jest normalne i powinno być bardziej rozbite/uproszczone? Nie jestem pewny reakcji kogoś, kto by zobaczył taki twór na technicznej rozmowie kwalifikacyjnej, dlatego wolę się zapytać niż zasiać jutro takie zapytania w całym projekcie.