1

請求書の表があります。私のサービス レイヤーは 1 つの請求書の請求書を計算する方法を知っていますTotalが、一連の請求書を でフィルター処理したい場合、Total「SQL でサポートされている翻訳がありません」という理由で LINQ クエリは失敗します。これは、すべての請求書レコードに対してネストされたクエリを実行できないために発生します。それを回避する正しい方法は何ですか?

各請求書は、文字通り、割引を含むテーブルTotalから計算された行の合計を合計することによって決定されます。InvoiceLines

public decimal Total
{
    get
    {
        return Lines.Sum(l => l.LineTotal); // Lines provided by repository
    }
}

私は、サービス層にすでにあるビジネス ロジックをデータベースに複製したくないと考えています。これには、請求書の合計に影響を与える品目の割引が含まれます。Totalしかし、直接フィルタリングできるデータベース列に請求書をキャッシュする以外に方法はありません。

請求書は不変であるため、データの整合性の問題が発生することはありませんが、データの複製は嫌いです。ビューを使用して請求書の合計を表示することもできますが、私のリポジトリはサービス層の機能を実行しています。

4

2 に答える 2

0

解決済み:

  1. モデルにキャッシュされた合計値を追加しました。これを設定する (キャッシュする) か、モデルの遅延ロードされたアイテムから合計を計算できます。
  2. 合計を計算するためにデータベースにビューを追加しました。これは、ビジネス ロジックに既にあるロジックの複製です。しかし、それは機能します。
  3. ビューの合計値をモデルにバインドし、キャッシュされた合計値を設定します。

これで、データベースによって計算され、モデルにキャッシュされた合計でデータをフィルター処理できるようになりました。

于 2010-11-22T18:41:09.560 に答える
0

Total は LINQ エンティティに追加されたプロパティですか? そうである場合、Total プロパティは使用できません。特にサポートされていません。データベースに対して行われる LINQ クエリで、再利用されたロジックをすべて 1 か所に配置するのは困難です...ルート クエリを実行する場合は、クエリの実行後に追加のタスクを実行します (これは ToList() を呼び出すことで簡単に実行できます)。 、これ以降のすべての処理は LINQ to Objects で行われ、好きなことを行うことができます。

HTH。

于 2010-11-02T15:34:09.660 に答える