私はLINQで次のクエリを理解方法を使って複製しようとしています。次のように私のSQLは、次のようにLINQ To Entities INNER JOIN with 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
私のLINQクエリはあるが、何の司会者がポストに割り当てられていないときには、まだ0のカウントを返します。 Post.ModeratorIdはnull値であることに注意してください。
私は、司会者のリストと、自分が管理している、または司会している投稿のカウントが必要です。 上記のSQLをLINQでどのように複製できますか?
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
}
次のように私のモデルが定義されています。
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; }
}
あなたの質問は少し不明ですが、 'CountOfPosts = p.Moderator.ModeratorPosts.Count()'に '0'を得ていますか?または、あなたのクエリは '0'' posts'を返していますか? –
'p.Moderator.ModeratorPosts.Count()'が0の場合は?他の2 - '.Include(p => p.Moderator.ModeratorPosts)'と同様に 'Include()'を試してみてください。これはナビゲーションプロパティでもあると思いますので、まずは –
投影時に 'Include'(無視されます)。次に、モデレーターを含むテーブルからクエリを開始するのはなぜですか? –