[解決済み] エンティティフレームワークのトップ5を選択
2023-05-19 09:10:48
質問
私は
[Person]
PersonID, EmailAddress, FirstName, LastName
[OnlineAccount]
OnlineAccountID, PersonID, Nickname
一人あたり0-*個のOnlineAccountを持つことができます。
C#のエンティティフレームワークで、アカウントを多く持つ上位5名を選択するにはどうすればよいですか?
どのように解決するのですか?
これを試してみてください。
var items = context.PersonSet.OrderByDescending(u => u.OnlineAccounts.Count).Take(5);
これは
IQueryable<Person>
. 遅延実行を実装しているため、まだ結果を返しません。これはSQLに変換され、必要なときに実行されます。
var metarializedItems = items.ToList(); // ToList forces execution
または
foreach(var item in items) // foreach forces execution
上の例は、このようなSQLに変換されます。
SELECT TOP 5 p.PersonID, p.EmailAddress, p.FirstName, p.LastName
FROM Person p
ORDER BY (SELECT COUNT(*) FROM OnlineAccount oa WHERE p.PersonID = oa.PersonID) DESC
この通りのSQLになるわけではありません。EFのバージョンが違えば異なるSQLが生成されるかもしれませんが、どのように動作するかを説明するために書きました。
Take(5)
は次のように変換されます。
TOP 5
.
OrderByDescending(u => u.OnlineAccounts.Count)
は次のように変換されます。
ORDER BY (SELECT COUNT(*) FROM OnlineAccount oa WHERE p.PersonID = oa.PersonID) DESC
. これはEntity Frameworkの威力です。.NETの式をSQLに変換してくれるのです。
関連
-
[解決済み】Entity FrameworkからのSqlException - セッション内で他のスレッドが動作しているため、新しいトランザクションは許可されません。
-
[解決済み] 関数を終了するには?
-
[解決済み] LINQ to Entities クエリでエンティティを構築できません。
-
[解決済み] エンティティフレームワークのタイムアウト
-
[解決済み] 特定のプロパティに対するLINQのDistinct()
-
[解決済み] Entity Framework 5 レコードを更新する
-
[解決済み] Entity FrameworkとLINQ to SQLの比較
-
[解決済み] Entity Frameworkにおける最速の挿入方法
-
[解決済み] EntitySetの更新ができない - DefiningQueryがあり、<UpdateFunction>要素が存在しないため
-
[解決済み】Entity Frameworkプロバイダタイプをロードできませんでしたか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み] [Solved] アセンブリ System.Web.Extensions dll はどこにありますか?
-
[解決済み] [Solved] 不正な文字列値: '\xEFxBFxBD' for column
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み】5.7.57 SMTP - MAIL FROMエラー時に匿名メールを送信するためにクライアントが認証されない
-
[解決済み] 2つのリストを結合する
-
[解決済み】aspNetCore 2.2.0 - AspNetCoreModuleV2 エラー
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】「namespace」なのに「type」のように使われる。