この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 35720|答える: 2

[出典] EFにおけるExpression<Func<T, bool>>とFunc<T, bool>の違い

[リンクをコピー]
掲載地 2021/09/26 9:21:21 | | | |
Func<TObject、bool>は代表です

Expression<Func<TObject、bool>>は式です

コンパイル後、Expressionは実行前にデリゲートとなります。 たとえば

Expression<Func<int, bool>> ex = x=>x < 100;

Func<int, bool> func = ex. Compile();

その後、funcを呼びます:

func(5) //-true を返す

func(200) //- はfalseを返す

式は直接呼び出すことはできません。

ケース:誤ったクエリコードはデータベースの完全なテーブルクエリを引き起こします

エラーコードは以下の通りです:

Func型の変数をCountメソッドへの引数として渡します。EFはテーブル全体のデータをクエリし、メモリからフィルタリングします。 生成されるSQL文は以下の通りです:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      実行したDbCommand(8ms) [パラメータ=[]、CommandType='Text'、CommandTimeout='30']
      選択 [c] [id]、[c]。 [client_type]、[c]。 [ステータス]、[c]。 [借主]
      [表] AS [c]
正しいコードは以下の通りです:

正しい書き込みはデータベースからwhere条件を追加し、カウントの値を直接返します。 生成されるSQL文は以下の通りです:

info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      実行したDbCommand(4ms) [パラメータ=[]、CommandType='Text'、CommandTimeout='30']
      SELECT COUNT(*)
      [表] AS [c]
      ここで[c]。 [client_type] = 1


EF Core Series 4は生成されたSQL文を扱います
https://www.itsvse.com/thread-9564-1-1.html
efは生成されたSQL文を表示します
https://www.itsvse.com/thread-3813-1-1.html

Funcの代理呼び出しは以下の通りです。System.Linq.Enumerable以下にカウント

Expression<Func<T, bool>> で呼ばれる式はSystem.Linq.クエリ可能以下にカウント



(終わり)





先の:[練習] Java JDK Windowsのグリーンノーインストール版を作る
次に:JavaはAlibaba Cloud SMS SDKを通じてSMS認証コードを送信します
掲載地 2021/09/26 16:19:52 |
学んだ
掲載地 2021/09/26 17:31:25 |
はい、また学びに来ました...
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com