1

テーブル Person(PersonID, Name, ....) があるとします。次に、EF を使用してエンティティ モデルを作成し、Ria サービスに基づいて DomainService を作成します。クライアント側 (sliverlight) で、フィルター関数の動的 linq を作成しようとしました。私がしたことは次のとおりです。

q = EntityQuery<MyData.Person>
q = q.Where(p=> p.Name.Contains(NameVar));

それは結構です。次に、電話用に別の 2 つのテーブルがあります。

Phone(PhoneID, PhoneNumber, ...)
PersonPhone(PersonID, PhoneID, ...)

次に、PhoneNumber に一致するフィルターを追加します。linq クエリ q のような書き方は?

 q = q.Where(p => p.PersonPhone.
                    Where(ph=>ph.PhoneNumber.Contains(PhoneVar)&& ph.PersonID == p.PersonID).Count()>0);

コンパイルを渡すことはできますが、アプリを実行するとエラーが発生しました: クエリ演算子 'Count' はサポートされていません

この問題を解決するにはどうすればよいですか?

4

2 に答える 2

0

QueryBuilderを使用する必要があります

これがサンプルです

var qb = new QueryBuilder<Person>().Where(p => p.PersonPhone.Where(ph=>ph.PhoneNumber.Contains(PhoneVar)&& ph.PersonID == p.PersonID).Count()>0);

次に、qbを取得して、好きなクエリに適用できます。

query = qb.ApplyTo(query);

を使用Func<QueryBuilder<Person>>すると、動的フィルターを共通のコントロールなどに渡すことができます。関数を呼び出すと、そのViewModelから現在の値を取得します。

于 2012-04-05T13:48:54.313 に答える
0

これは、サーバー上でカスタムクエリメソッドを記述し、Personのデフォルトクエリの代わりにそのメソッドを呼び出すための良いシナリオのように聞こえます。RIAサービスは、クライアントでのLINQ操作のサブセットのみをサポートしますが、サーバーですべてのLINQ演算子を使用できます。

于 2010-03-11T09:24:23.883 に答える