T-SQL ではCROSS APPLY
、ステートメントの左右のテーブル間で考えられるすべてのバリエーションを取得するために使用できます。今、私は次のような状況にC#
あり、LINQ-to-Objects を使用して問題を解決する方法があることを願っています。
TestData
オブジェクトに似たオブジェクト(以下のような)のリストがありKeyValuePair<string, object>
ます(ちょうどaKey
とValue
プロパティ):キーはすべてにすることができ、同じキーを持つ複数のオブジェクトが存在する可能性があります。
IList<KeyValuePair<String, Object>> objects;
// Content of list
// # | Key | Value
// 1 | "A" | 1
// 2 | "A" | 2
// 3 | "A" | 3
// 4 | "B" | 4
// 5 | "B" | 5
// 6 | "C" | 6
// 7 | "D" | 7
// 8 | "D" | 8
リクエストされたキーのリストもあります:
IList<String> requestedKeys = new List<string>() { "A", "D" };
ここで、リスト内のキー間の KeyValuePair オブジェクトのすべての可能な組み合わせを取得したいと考えていますrequestedKeys
。
IList<IList<KeyValuePair<String, Object>>> result = ...
// Content of 'result' will be in this example 6 lists with each 2 KeyValuePair objects
// # | "A" | "D" | (If there are more in the requestedKey list then there are more KeyValuePair items in the innerlist.)
// 1 | 1 | 7 |
// 2 | 2 | 7 |
// 3 | 3 | 7 |
// 4 | 1 | 8 |
// 5 | 2 | 8 |
// 6 | 3 | 8 |
LINQ-to-Objects を使用して私の問題を解決することは可能ですか? そうでない場合は、とにかくそれを構築する最も効率的な方法を教えてください.
編集1:
結果がどうあるべきかをより明確にするために:
次のようなLINQ-to-Objectsクエリが必要です:
@ジョアンナは、複数のsに関するヒントに感謝しますfrom
が、問題は次のとおりです:この構文では、動的なsの量from
。私の場合、リストfrom
内のアイテムと同じ数の sが必要ですrequestedKeys
var result =
from listA in objects.Where(m => m.Key == "A")
from listD in objects.Where(m => m.Key == "D")
// from .....
// from .....
// overhere as many froms as items in 'requestedKeys' list
select new [] { listA, listD /*, All other lists */ }