私のアプリでは、顧客に関するいくつかの情報を表示する必要があります(顧客にはコードと名前があります)。フィールドの一つは質問のLinqToSqlカスタム関数の実行コスト
DisplayName = Code + " - " + Name
「表示名」である私は、ビューモデルに、データベースから顧客を取得し、このように、表示名を設定します。
from customer in this.Context.Customers
select new CustomerViewModel
{
DisplayName = customer.Code + " - " + customer.Name
}
しかし、私はこれを抽出したいと思います私は複数の場所でそれを使用し、論理が変更された場合(DisplayName = Nameなど)、式や関数に論理を追加すると、多くの変更を行う必要があります。それが正常に動作し、ロジックを再利用可能になりますが、問題は関数が解析できないということである
from customer in this.Context.Customers
select new CustomerViewModel
{
DisplayName = CustomerDisplayName(customer)
}
:
したがって、私はこの機能
Func<Customer, string> CustomerDisplayName = (c => c.Code + " - " + c.Name)
と、このようにそれを使用するを作成しましたLinqToSqlは最初にデータ( 'Code'とName ')を取得し、各レコードの関数を実行します。
私はパフォーマンスについて心配する必要がありますか(データがたくさんある場合)、最初のオプションに固執する必要がありますか?それとも、関数を使うのはいいですか?
fist文は良いクエリを生成しますか? 2番目のクエリは2つのクエリを生成しますか? – TheBoyan
「多くのデータが意味するもの」とは何か:100万を超えるもの?あなたはN + 1クエリーを得ない限り、あなたが心配する必要はないと思うと思います。(あなたのSQLをプロファイルして確かめてください) – Pleun
@Bojan:両方とも単一のクエリを生成します。私の意見はどちらも「良い」ですが、2番目のデータはサーバからデータを取得した後に余分な作業をしなければなりません – SzilardD