linqとlambdaのトラブルシューティング/where句誤差
この例は、結合およびWhere
条項にLinqおよびLambda式を使用する場合の一般的な誤差を示しています。 欠陥のあるアプローチを分析してから、正しい解決策を提示しましょう。
誤ったlinq/lambda参加試行:
次のコードスニペットは、誤った実装を示しています:
<code class="language-csharp">int id = 1; var query = database.Posts.Join( database.Post_Metas, post => database.Posts.Where(x => x.ID == id), // Incorrect: Should select a single value, not an IQueryable meta => database.Post_Metas.Where(x => x.Post_ID == id), // Incorrect: Should select a single value, not an IQueryable (post, meta) => new { Post = post, Meta = meta } );</code>
メソッド内のpost
およびmeta
セレクターにあります。 参加する単一の値(ID)を選択する代わりに、Join
clausesを使用してWhere
コレクションを返します。 IQueryable
キーマッチングの単一値が予想されます。Join
正しいアプローチ:
1。 LINQクエリ構文の使用(より読みやすい):
これは、多くの場合、参加を表現するためのより明確な方法です:
<code class="language-csharp">var id = 1; var query = from post in database.Posts join meta in database.Post_Metas on post.ID equals meta.Post_ID where post.ID == id select new { Post = post, Meta = meta };</code>
ラムダの表現を好む人の場合、正しい実装は次のとおりです。 このバージョンは、
およびを結合キーとして正しく使用します。
句は、<code class="language-csharp">var id = 1; var query = database.Posts .Join(database.Post_Metas, post => post.ID, // Correct: Selects the ID for joining meta => meta.Post_ID, // Correct: Selects the Post_ID for joining (post, meta) => new { Post = post, Meta = meta }) .Where(postAndMeta => postAndMeta.Post.ID == id); // Filters after the join</code>
post.ID
の後に適用されます。 これは、正しいフィルタリングに不可欠です。meta.Post_ID
Where
結合キーの正しい使用法と句の適切な配置を理解することにより、開発者は一般的なエラーを回避し、効率的かつ正確なLINQクエリを書き込むことができます。
以上がLinqとLambdaが参加する方法と条項はどこに参加しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。