2

私は次のクエリを持っています:

      var query = db.Prog
       .Where (a => a.Prog != "00000" && a.fn != "Koll")
       .Select(a => new  {a.Prog, a.MEfn})
       .OrderByDescending(a => a.MEfn)

クエリは正常に機能しますが、Lambdalinqクエリを作成する順序に一般的なルールがあるかどうか疑問に思います。意味、。前に来る場所。選択など。

誰かがLINQを作成する必要がある順序やベストプラクティスについて教えてもらえますか?

4

3 に答える 3

1

あなたは良い注文になることができます。

dbが非常に優れたLINQプロバイダーを備えたSQLDBを指している場合と、dbがメモリ内オブジェクトである場合を区別してみましょう。私はそれが最初だと思います。

LINQ to SQLプロバイダーを使用している場合、ステートメントはクエリをオブジェクトに具体化するときにのみ評価されるため、SQLオプティマイザー(DB内)がステートメントの順序を処理します。

逆の場合は、ステートメントがメモリ内コレクションに対して実行された場合、またはLINQからSQLへのマテリアライズされたコレクションに対して実行された場合に発生します。その場合、それらは順番に実行されるため、コレクション内の結果の数を減らすステートメントを最初に実行する必要があります。Where最高の候補です!!!

于 2012-09-08T22:08:15.453 に答える
1

LINQクエリを作成する順序に関するベストプラクティスはありません。最初にフィルタリングを実行するか、プロジェクションを実行するかによって異なります。たとえば、あなたの場合、フィルターが使用する'fn'プロパティを含まない匿名タイプに投影しているため、selectが最初の場合、where句で使用することはできません。

より良い方法は、プロパティにわかりにくい名前を付けることです。また、「fn」はプロパティ名のPascalCaseの後には続きません。フィールドの場合は、おそらくパブリックにすべきではありません。

于 2012-09-08T22:09:53.957 に答える
0

それらが含まれるべき順序は、あなたがしていることの文脈に完全に依存しています。したがって、OrderByが単にデータを表示しやすいようにフォーマットしている場合は、コレクションをトリミングした後でデータを最後に配置します。並べ替えられたコレクションの最初の値を探している場合は、コレクションが繰り返される前にそれが必要になる可能性があります。最初に取得します。

于 2012-09-08T22:07:16.593 に答える