2013-02-10 107 views
0

我很難滿足這個需求的查詢需求。LINQ查詢概念

這裏是我有一個表中的數據:

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和2行= A

我想直接的SQL我可以做一個別名的表像SELECT ....作爲Table,然後選擇只在2行表1沒有被發現的行,但我不肯定如何在LINQ中去解決這個問題。

任何想法?

編輯:對不起,我的問題不明確,但我不知道提前準則其中row1 in('A','E')。基本上,如果我在ROW1檢索的記錄(RECORD1)與特定的值,如果我找到另一個記錄(RECORD2)在2行相同的特定值,我不想RECORD2

+0

'.Where((obj => obj.row1 ==「E」&& obj.row2!=「A」)|| (obj => obj.row1 ==「A」&& obj.row2!=「E」)'This?你的要求不是很清楚。 – vcsjones 2013-02-10 17:07:57

+0

爲什麼不能添加'NOT(row1 ='E'和row2 ='A')'? – Bulat 2013-02-10 17:08:17

+0

在同一個表上使用LINQ-left-join並查找空值。 http://stackoverflow.com/questions/1122942/linq-to-sql-left-outer-join-with-multiple-join-conditions。此問題在編輯 – 2013-02-10 17:17:01

回答

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 

也許你可以顯示所需的輸出,如果這仍然錯過了標誌。

0

我打算假設您要創建一個PIVOT查詢。

所以你輸入你想獲得形式的輸出

鍵 - 值

A - B,C,d,E

乙 - B,C,A,d

其中key是String類型的和值是IEnumerable類型

在這種情況下,你想: -

var output = allRows.ToLookup(x => x.row1, x => x.row2);