私は、UserInterface、BusinessLogic、Service(WCF)、DataAccess(EF6)の4層のアーキテクチャプロジェクトを持っています。私はEFを使って評価するために私のデータアクセス層に渡すことができる表現を受け入れる私のサービスでメソッドを公開しました。ただし、式がシリアライズ可能ではないため、これは機能しません。WCFがシリアライズ可能ではないため、式ツリーはWCFを使用して動作しません。
クライアント側では、クエリ可能な式を作成してサーバー側に送信し、正しいプロジェクションを返すことができるようにしたいと考えています。
サーバーサイド:
public virtual IEnumerable<Person> Get(Expression<Func<Person, bool>> expression)
{
using (var ctx = MyContext())
{
IQueryable<PersonDto> col = ctx.DbContext.People.Where(expression);
//
return col.ToList();
}
}
クライアント側:
public IEnumberable<PersonDto> GetFromService(Expression<Func<PersonDto, bool>> expression)
{
using (MyService client = new MyService())
{
return client.Get(expression);
}
}
私はこれをやっている方法に代わるものはありますか?式と関数が直列化できない理由はありますか?
あなたはこのライブラリを使用しようとすることができます:https://github.com/esskar/Serialize.LinqをAlreayはここに答え – Evk
:https://stackoverflow.com/questions/567316/can-you-pass-funct-bool-through-a-wcf-service –
式ツリーと文字列条件をシリアル化する理由はありますか?すなわち文字列基準をサーバに渡し、サーバは次に表現ツリーを構築する。式ツリーをシリアライズすると、デバッグ/トラブルシューティングが難しくなる複雑さ/オーバーヘッドが追加されます。 –