0

必要なクエリのこの要件に頭を悩ませるのに苦労しています。

これが私がテーブルに持っているデータです:

row1  row2
A     B
A     C
A     D
A     E
E     B
E     C
E     A
E     D

すべての行が欲しい

where row1 IN ('A', 'E')

しかし、row1=Eおよびrow2=Aの行は必要ありません。

ストレートSQLでは、 SELECT .... AS Table1のようなエイリアステーブルを作成してから、Table1でrow2が見つからなかった行のみを選択できると思いますがLINQでこれを実行する方法がわかりません。

何か案は ?

編集:私の質問のあいまいさについて申し訳ありませんが、('A'、'E')のrow1の基準は事前にわかりません。基本的に、 row1に特定の値を持つレコード( record1)を取得した場合、別のレコード(record2 )のrow2に同じ特定の値が見つかった場合、 record2は必要ありません。

4

2 に答える 2

0

PIVOT クエリを作成すると仮定します。

したがって、入力を使用して、フォームの出力を取得したい

キー - 値

A - B、C、D、E

B - B、C、A、D

Key は文字列型で、Value は IEnumerable 型です

その場合、あなたが望む: -

var output = allRows.ToLookup(x => x.row1, x => x.row2);
于 2013-02-11T20:48:07.017 に答える
0

更新後も完全には明確ではありませんが、これで正しい軌道に乗ることができると思います。

var rows = new[] {
Tuple.Create("A", "B"),
Tuple.Create("A", "C"),
Tuple.Create("A", "D"),
Tuple.Create("A", "E"),
Tuple.Create("E", "B"),
Tuple.Create("E", "C"),
Tuple.Create("E", "A"),
Tuple.Create("E", "D"),
};
var reference = Tuple.Create("A", "E");

var result = rows.Where(r => (r.Item1 == reference.Item1 || r.Item1 == reference.Item2)
                          && r.Item2 != reference.Item1
                          && r.Item1 != reference.Item2);

更新後、最後の条件を含める必要があるかどうかわかりません。現在、次のように返されます。

Item1 Item2 
A     B 
A     C 
A     D 
A     E 

これでも問題が解決しない場合は、目的の出力を表示できるかもしれません。

于 2013-02-10T20:58:02.223 に答える