0

我需要SELECT查詢所有兒童造成的:使用<code>LINQ</code>,也<code>SQL</code>查找多個家長在單個SQL查詢和LINQ查詢

ParentId Country State   ChildId 
1   India  kerala   2 
1   India  TamilNamdu  3 
5   Pakistan Kasagithan1  6 
5   Pakistan Kasg2   7 

而且我Table是:

Id ParentId Country  State 
1 0  India   NULL 
2 1  NULL   Kerala 
3 1  NULL   TamilNamdu 
4 1  NULL   Karnadaka 
5 0  Pakisthan  NULL 
6 5  NULL   Kasagithan 
7 5  NULL   Kasg2 
8 5  NULL   Afganistha 
9 0  China   NULL 
10 9  NULL   Hwuesang1 
11 9  NULL   sate1 
12 9  NULL   sate2 
+2

我建議你改變你的設計。你可以假設每個'國家','國家'是一個單一的實體(表) –

+0

我正在使用父母和孩子表是單表 – Sajith

+0

嗯是的,除了它帶來的麻煩之外,有什麼優勢呢? –

回答

1

試試這個SQL查詢:

select parentid, country, state, childID 
from tablename 
where parentid IN (1,5) 
+1

它將檢索ID 5和1的所有行。 – Yuvi

+0

好的,謝謝,你能給linq查詢嗎? – Sajith

+0

-1:'它將檢索所有具有ID5和1'的行,它應該是'ID1到5(1到5之間)',這對於該問題來說不是正確的答案。問題是有關國家與他們的國家不過濾ID –

1

在SQL自連接應該這樣做:

SELECT P.Id AS ParentId, P.Country, C.State, C.Id AS ChildId 
FROM table AS P 
JOIN table as C ON C.ParentId = P.Id AND C.ParentId <> 0 
WHERE P.State IS NULL 
+0

@Federik,謝謝我測試了它我得到了結果在sql – Sajith

1

可以自聯接使用IdParentId列的表。下面的代碼是LINQ實施這種方法的:

using (YourEntity yourEntity = new YourEntity()) 
{ 
    var result = 
    (
     from state in yourEntity.YourTableName 
     from country in yourEntity.YourTableName 
     where state.ParentId != 0 && state.ParentId == country.Id 
     select new { ParentId = state.ParentId, Country = country.Country, State = state.State, ChildId = state.Id } 
    ).ToList(); 
} 

您可以測試使用Console結果:(或Debug.WriteLine()改變它看到輸出窗口中的結果,如果你不能使用控制檯)

foreach (var item in result) 
{ 
    Console.WriteLine("{0} {1} {2} {3}", item.ParentId, item.Country, item.State, item.ChildId); 
} 

而對於SQL查詢,你可以使用:

SELECT state.ParentId, country.Country, state.State, state.Id As 'ChildId' 
FROM YourTableName As state INNER JOIN YourTableName AS country 
    ON state.ParentId <> 0 AND state.ParentId = country.Id 
+0

謝謝我稍後再嘗試.. – Sajith

+0

@Sajith希望你會(: –