。
あなたのモデルがどのように構造化されているかは推測していますが、リポジトリではなくデータベースにあるテーブルを使用して問題を解決できます。
public class ForumMember
{
public int Id { get; set; }
}
public class Member
{
public int MemberId { get; set; }
}
public class ThreadComment
{
public int CreatorUserId { get; set; }
}
public class ForumContext : DbContext
{
public DbSet<ForumMember> ForumMembers { get; set; }
public DbSet<Member> Members { get; set; }
public DbSet<ThreadComment> ThreadComments { get; set; }
}
public class Repository
{
public IEnumerable<Something> GetAllForumMember()
{
using (var context = new ForumContext())
{
var query = from fm in context.ForumMembers
join m in context.Members on fm.Id equals m.MemberId
//where add where clause
select new Something
{
memberId = m.MemberId,
commentCount = context.ThreadComments.Count(x => x.CreatorUserId == m.MemberId)
//... add other properties that you want to get.
};
return query.ToList();
}
}
}
これはテストされていないコードです。 Entity Framework & Linq-to-SQLを使用するための学習曲線がありますので、チュートリアルを進めることをお勧めします。 LinqPadのようなツールを入手することもできます。LinqPadは、データベースにLinqクエリを書くのに慣れるのに役立ちます。
これはやや役立ちたいと思っています。質問を詳細情報で更新する必要がない場合は、モデルやデータベースコンテキストのコードも含まれます。
スクリーンショットではなくコードを追加してください。問題が何であるかを示すエラーメッセージが表示されます。 LINQ to Entitiesは 'GetAll'メソッドをSQLに変換できません。リポジトリではなくデータベース内のテーブルを使用するようにコードを再構築してみてください。 – Scrobi
スクリーンショットではなくコードを置き換えるアドバイスに感謝します。 実際、EFでcount()のサブクエリを構築する方法はわかりません。 エラーメッセージは、どのようにするかわからないメッセージです。 が好きです。 select threadCount =(dbo.Threadからの選択(1)t WHERE t.userId = @ tm.userId) from dbo.ThreadMember tm 元のSQLは、実際にはEFよりもはるかに簡単です。 –
@Mcxieなぜ 'GetAll()'メソッド/拡張子を使用していますか、そしてどのような名前空間からこのメソッド/拡張子/アセンブリを取得しますか? – Progman