多くの箇所で使用されているロジックを、SQLのコンテキストで再利用、集中管理、実行できる式に変換しようとしていますサーバ。Entity Frameworkのコードコレクションで子コレクションに式を作成する方法
これは、式を渡すことによって、EFコンテキストで直接テーブルにクエリを実行するときに実行できます。私が持っている問題は、EFコードファーストでICollectionとして表現されているので、テーブルの子コレクションでこれを実行しようとしています。
コードファーストで定義された簡単な例のテーブル。
public class Table
{
public int TableId { get; set; }
public virtual ICollection<ChildTable> Children { get; set; }
}
どのように私はそれをクエリしたいのですか?
var records = context
.Table
.Select(table => new
{
ChildRecordCount = table.Children.Count(child => !child.IsArchived), // This works.
AltChildRecordCount = table.Children.Count(HowToExpressThisInCSharp()),// Cannot fathom how to do this.
});
(SQLは、私のC#メソッドの何も知らない)私はのFuncを返す様々な方法(下記参照)を試みたが、彼らは、私はそれを期待するようEFが失敗する原因。では、より簡単なインラインメソッドは式ツリーにどのように変換されますか(SQL Serverに対して実行されるのがわかります)
問題と可能な解決策は、ここで説明されているhttp://www.albahari.com/nutshell/linqkit.aspx –
@IvanStoevおかげで、私はLinqKitを忘れ、それはそうです理想的。私は答えとしてマークすることができますようにあなたのコメントを回答として追加できますか? –