多くのGoogleの検索とコードの実験の後、SQLで複雑なC#LINQからオブジェクトへの問題ROW_NUMBER()... PARTITION BY関数とサブクエリまたは2つのペアで簡単に解決できます。グループ内のLINQからオブジェクトへのインデックス+別のグループ(別名:ROW_NUMBER、PARTITION BYの同等のもの)
- まず、グループリストを(Document.Title、文書によって:
は、ここで私はリストから重複したドキュメントを削除して基本的な要件をcode--で何をしようとしている、言葉で、です。このようなグループ内では、各ドキュメントにインデックスを割り当てます(例:Index 0 ==このソースからこのタイトルを持つ最初のドキュメント、Index 1 =これを持つ2番目のドキュメント)。このソースからのタイトルなど)。私はSQLのROW_NUMBER()と同等のことが好きです!
- ここで、インデックスはステップ#2で計算された(Document.Title、Index)によってグループ化されます。グループごとに、最低のDocument.SourceIdを持つものを1つだけ返します。
ステップ#1(例えばcodepronet.blogspot.com/2009/01/group-by-in-linq.html)簡単ですが、私は、ステップ#2、#3に困惑して取得しています。私は、3つのステップすべてを解決するために、赤い波打ちのないC#LINQクエリを構築することはできません。
Anders Heilsbergさんの投稿this threadに私が上記のステップ#2と#3の答えが文法を正しく理解できればと思います。
slodge.blogspot.com/2009/01/adding-row-number-using-linq-to-objects.htmlで推奨されているように、インデックス計算を行うために外部ローカル変数を使用しないことをお勧めします。外部変数が変更された場合、その解決策が破損するためです。
最適なのは、「内部」グループ化(まずインデックスを計算するSource、重複を除外するIndex)は、それぞれの小さなオブジェクトで操作できます各タイトルのグループの文書数は通常100未満ですので、「タイトルごと」グループになります。私は本当にNを望んでいません。N 解決方法!
これはネストされたforeachループではっきりと解決できますが、LINQでは単純な問題のようです。
アイデア?
ちょっとダルビーキー - これは素晴らしいです!あなたの解決策はよく見えます。今私は初めて自分自身を理解することができないということについて悪くはない。私はSelect-with-indexのオーバーロードを発見しましたが、LINQクエリにそれを取得する方法を理解できませんでした。いくつかの黒帯のコードはあなたの目的のために、助けと可能なことの教育に感謝します。 –