2

私のライトスイッチアプリケーションでは、残高値を持つ顧客の顧客画面を作成しようとしています。私の残高値は、顧客エンティティの計算フィールドです。

このようにプロセスクエリイベントにロジックを配置しようとしたとき

query =( from i in query

where(i.Balance>0)
select i );

例外が発生します..このような状況を処理するための最良の方法は何ですか?私はここで答えを見ましたが、それを正確に実装する方法がわかりませんでした。サンプルコードが必要です。誰かが私を助けることができますか?前もって感謝します

4

2 に答える 2

1

クエリは、計算フィールドについて知らないデータプロバイダーによって実行されます。実行できることは、計算されたフィールドではなく、実際のフィールドを参照して、LINQを介して必要なものをフィルター処理することです。

たとえば、Balanceが計算フィールドであり、Credit-Debit(通常のフィールド)として定義したとします。クエリでBalance>0の行を返すようにします。これがクエリの記述方法です(PreprocessQueryイベントでは、ProcessQueryイベントがないことに注意してください)。

partial void TestQuery_PreprocessQuery(ref IQueryable<Customer> query)
{
    query = (
        from c in query
        where ((c.Credit - c.Debit) > 0)
        select c);
}

この問題を解決するもう1つの理論的な方法は、Executedイベントハンドラーにフィルターを設定することです。しかし、どういうわけか、私がそれをするとき、フィルターはスクリーンに適用されません。ただし、この方法が機能する場合でも、クライアント側でフィルタリングを行うことになります。これは、希望する方法ではない可能性があります。

于 2012-03-02T02:51:17.537 に答える
1

私は実際にこの問題の解決策を探しています(残念ながら、私の計算では再帰を使用する別の計算フィールドを使用しているため、計算フィールドからの計算を含めることはできません)

役立つと思われるいくつかのポインター:@ julio.g-Executedイベントハンドラーの場合、「result」パラメーターはIEnumerableパラメーターです(「query」パラメーターがref IEnumerableであるPreProcess_Queryイベントハンドラーとは対照的です)。 )したがって、「結果」に加えた変更は、そのメソッドに対してのみローカルになります

@ 3oon-afaik、SQLビューはLightSwitchではサポートされていません。これまでに出会った最良のオプションは、ストアドプロシージャに基づいてWCF RIAサービスを作成し、それをデータソースとして追加することです。このブログ投稿は、あなたが始めるのに役立つはずです。 http://tejana.wordpress.com/2010/12/09/microsoft-lightswitch-and-stored-procedures-using-wcf-ria-services/

お役に立てば幸いです。

于 2012-04-10T00:24:24.090 に答える