私はいくつかの異なる永続化データセットでフィルタを指定できるようにするSilverightアプリケーションを持っています。永続化されたデータは、XMLまたはリレーショナルデータベーステーブルです。私は、データベース・オプションとして、異なるデータベース・オプション、PostgreSQL、MySQLを最低限サポートする必要があるため、nHibernateをデータベース・レイヤーとして使用しています。フィルター・フィールドは、どのデータ・セットが照会されているかによって異なります。SilverlightのXMLとデータベースフィルタリング:動的LINQ?より良い方法がありますか?
現在、フィルタはSilverlightクライアントからサーバーに文字列として渡され、サーバー上でDynamic LINQクラスを使用してLINQクエリに変換します。これは、すべてのデータがメモリにロードされたXMLの場合にはうまくいきますが、データベースにとって最良のアプローチかどうかはわかりません。
私の質問は、クライアントからの文字列としてフィルターを送信し、次に動的LINQライブラリーを解析するのが最善の方法かどうかです。 nHibernateで生成されたLINQクエリを使用することはできますか?あるいは、SilverlightでExpressionオブジェクトをシリアル化してサーバーに渡すことを検討する必要がありますか?それとも別の方法がありますか?
アクセスのための標準インターフェースを提供するために私の遠いオブジェクトが必要です。それらのいくつかがありますので、必要なフィルターごとに異なるメソッドインターフェースを提供するオプションはありません。
以下は、私のパーシスタンスクラスがサポートするインターフェイスの例です。私が苦労しているのはwhereExpressionです。
public interface ICustomerPersistor
{
Customer Add(Customer customer);
Customer Update(Customer customer);
Customer Delete(Customer customer);
Customer Get(Guid customerId);
int Count(string whereExpression);
Customer Get(string username, string password);
List<Customer> Get(string whereExpression, int offset, int count);
}
更新は本当に私が立ち往生している質問です。私はあなたのブログとただ1つのqについて素早く見ました。 ADO.Netデータ・サービスを使用してRESTを介して問合せを転送していますが、サーバー側では問合せへのフルアクセス権が必要です。私の場合、diff LINQプロバイダーで使用します – sipwiz
ADO.NET Data Servicesは、IQueryableのプロパティを公開して公開しています。つまり、IQueryable が公開され、残りの部分は公開されます。しかし、あなたがあなた自身のプロバイダを書かない限り、あなたは完全な*コントロールを持っていません。 「Where」「OrderBy」「Skip」「Take」などが適用されます。 –