クエリは、計算フィールドについて知らないデータプロバイダーによって実行されます。実行できることは、計算されたフィールドではなく、実際のフィールドを参照して、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イベントハンドラーにフィルターを設定することです。しかし、どういうわけか、私がそれをするとき、フィルターはスクリーンに適用されません。ただし、この方法が機能する場合でも、クライアント側でフィルタリングを行うことになります。これは、希望する方法ではない可能性があります。