3

エレガントな方法で式ツリーを構築する方法についてさらに知識を得ることを期待して、命名スキーマ「something-Linq」のライブラリの1つを見たところ、がっかりしました。私が見つけることができたのは、IEnumerable を拡張するメソッドだけだったからです。もちろん、「通常の」C# コードを使用します。

今、私はこの質問を持っています: IEnumerable の非式拡張は、ライブラリの名前に「Linq」を含めることを本当に正当化しますか? それとも、作者は IEnumerable 拡張ライブラリのダウンロード数を増やそうとして誇大広告に飛び乗っているだけで、ライブラリの名前に「Linq」が表示されているときに IQueryable と式を期待していたのは正しかったのでしょうか?

編集:

Linq-to-... と something-Linq ライブラリには違いがあると私は主張します。IMHO Linq-to-... は linq プロバイダー ライブラリであり、something-Linq は linq 拡張機能です。Linq プロバイダー ライブラリは、結果で IQueryable または IEnumerable を公開するかどうかを選択できると思います - linq 拡張機能にはその選択がありません。私に関する限り、それらは両方の種類のプロバイダ ライブラリで動作できる必要があります。つまり、すべての linq 拡張機能は、Queryable 拡張機能と Enumerable 拡張機能の両方を提供する必要があります。

編集2:

Jon と私の間で、彼の回答のコメントで非常に活発な議論が行われました。うまくいけば物事を明確にするためにブログ投稿を作成することを志願しました: LINQ の未知の海域のマッピング

編集3:

この議論に興味のある方は、ぜひ私のブログ記事にアクセスしてください。恐ろしいので投稿自体をスキップして、Jon による議論と説明に直行してください。

4

5 に答える 5

4

LINQ は、式ツリーを意味するものではありません。これは、LINQ の一般的なスタイルでのデータ アクセスを意味します。LINQ to Objects には式ツリーはありませんが、LINQ IMO であることは間違いありません。

LINQ to XML はもう少し専門的です。実際にはIEnumerable<T>、入力と出力の両方でさまざまな方法で公開される単なる XML API です。つまり、LINQ to Objects では非常にうまく機能しますが、標準の演算子自体は実装されていません。ただし、通常は LINQ to Objects で使用し、結果は「LINQ のような」コードになるため、それほど悪くはないと思います。

確かに、式以外の拡張機能が LINQ-to-whatever と呼ばれることに問題はありません。実際、私のMoreLINQおよびPush LINQプロジェクトを考えると、そのようなスタンスは偽善的です。

私には2つの主な質問があります:

  • API はデータ アクセスと処理に関するものですか?
  • VB9 と C#3 の言語機能を使用してコードを読みやすくするために、アクセス/処理を流暢に、理想的には (必ずしもそうとは限りませんが) クエリ式パターンに準拠させようとしていますか?
于 2009-03-10T09:26:56.487 に答える
2

LINQは、すべての人にとって異なる何かを意味します(すべてにラベルを付けるために使用される場合に必ず発生します):

  • 組み込みDSLでクエリを表現することにより、データベースにアクセスする便利な方法。
  • 実行時のコードの分析と変換をサポートする言語機能。
  • 遅延関数型プログラミング言語に触発された手法を使用して、リストを一律に処理します。
  • 何かを一律に扱う...同上。

これらの中で(私にとって)これまでで最も有用なものは関数型プログラミングの部分ですが、混乱を避けるために、代わりに関数型プログラミングと呼んでいます。

于 2009-03-10T09:40:30.200 に答える
2

簡単な答え:マーケティングの仕掛け

人々は、「Linq-something」または「something-linq」という用語をマーケティングの仕掛けとして使用して、顧客/開発者にライブラリが何であるかを知らせます。これにより、マーケティング (またはドキュメント開発者) がライブラリの機能を説明する時間を節約できます。

于 2009-03-10T09:20:40.590 に答える
1

Linq で行うことはすべて、「通常の」C# コードであり、ほとんどが IEnumerable の拡張です。

編集: StackOverflow は、実際に上で IEnumerable < T > と言ったことを隠したいようです。Linq 互換ではありません。

于 2009-03-10T11:10:20.187 に答える
0

はい、たくさんの誇大宣伝がゲームの名前のようです

また、「エレガントな方法で式ツリーを構築する」は矛盾した表現です

優れた LINQ の良い例はあまりありません

Linq to Sharepoint プロジェクトは、何もないよりはましです

http://linqtosharepoint.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=8713

于 2009-03-10T09:25:01.950 に答える