Ich versuche, die folgende Abfrage in LINQ mithilfe der Verständnismethode zu replizieren. My SQL ist wie folgt:LINQ zu Entitäten INNER JOIN mit COUNT
SELECT COUNT(Post.Id), User.Id, User.Name
FROM Post
INNER JOIN User ON Post.ModeratorId = User.Id
WHERE Post.Status IN ("Live", "Pending", "Expired")
GROUP BY User.Id, User.Name
meine LINQ-Abfrage wie folgt ist aber die gibt noch eine 0 Zählung, wenn kein Moderator zur Post zugewiesen wurde. Beachten Sie, dass eine Post.ModeratorId ein Nullwert ist.
Ich möchte nur eine Liste der Moderatoren und eine Anzahl von Post sie sind oder moderiert haben. Wie kann ich das obige SQL in LINQ replizieren?
public IEnumerable<ModeratorPostViewModel> GetModeratorPostCount()
{
var posts = _context.Post
.Include(p => p.Moderator)
.Include(p => p.Status)
.Where(p => p.ModeratorId != null && p.Status.Name IN ("Live", "Pending", "Expired"))
.OrderBy(p => p.Moderator.Name)
.Select(p => new ModeratorPostViewModel
{
Id = p.ModeratorId,
Name = p.Moderator.Name,
CountOfPosts = p.Moderator.ModeratorPosts.Count()
})
.ToList();
// Return list
return posts
}
Meine Modelle sind wie folgt definiert:
public class Post
{
int Id { get; set; }
int StatusId { get; set; }
string ModeratorId { get; set; }
// Navigation properties
public Status Status { get; set; }
public ApplicationUser Moderator { get; set; }
// some other other properties
}
public class ApplicationUser : IdentityUser
{
public string Name { get; set; }
// Navigation property
public ICollection<Post> ModeratorPosts { get; set; }
}
Ihre Frage ist ein wenig unklar, aber erhalten Sie "0" für "CountOfPosts = p.Moderator.ModeratorPosts.Count()"? Oder Ihre Abfrage gibt '0'' Beiträge' zurück? –
Wenn es ist, dass Ihre 'p.Moderator.ModeratorPosts.Count()' 0 ist? Versuchen Sie ein 'Include()' für dieses, sowie Ihre anderen 2 - '.Include (p => p.Moderator.ModeratorPosts)', wie ich denke, das ist eine Navigationseigenschaft auch –
Zunächst einmal brauchen Sie nicht 'Include' (sie werden ignoriert) beim Projizieren. Zweitens, warum starten Sie Ihre Abfrage nicht aus der Tabelle, die Moderatoren enthält? –