2017-05-10 68 views
0

我有一個SQLite表 「短語」,如:小巧玲瓏多製圖PARENT_ID

CREATE TABLE [phrases] (
[id] INTEGER PRIMARY KEY AUTOINCREMENT, 
[phrase] CHAR, 
[parent_id] INTEGER); 

,我和演示數據填充:

id | phrase   | parent_id 
1 | parent phrase | (null) 
2 | some child 1 | 1 
3 | some child 2 | 1 

而且我有一個像C#模式:

class Phrase 
{ 
    int id { get; set; } 
    string phrase { get; set; } 
    int parent_id { get; set; } 
    Phrase parent { get; set; } 
} 

我該如何正確使用小巧玲瓏的這個表映射到這個類? 謝謝。

回答

0

您需要添加到您的選擇查詢詞組孩子(我用的MS-SQL):

SELECT  p.id  AS id, 
      p.phrase AS phrase, 
      p.parent_id AS parent_id, 
      c.id  AS id, 
      c.phrase AS phrase 
FROM  phrases p 
LEFT JOIN phrases c ON p.id = c.parent_id 

小巧玲瓏能夠通過使您的標識列被命名編號或ID的假設來返回的行分裂(默認)。

C#:

public IEnumerable<Phrase> GetPhrase() 
    { 
     const string sql = @" SELECT  p.id  AS id, 
              p.phrase AS phrase, 
              p.parent_id AS parent_id, 
              c.id  AS id, 
              c.phrase AS phrase 
           FROM  phrases p 
           LEFT JOIN phrases c ON p.id = c.parent_id"; 

     using (var connection = OpenConnection(_connectionString)) 
     { 
      return connection.Query<Phrase, Phrase, Phrase>(sql, (p, c) => 
      { 
       p.parent = c; 

       return p; 
      }, commandType: CommandType.Text); 
     } 
    } 
  • 這項工作只爲一個一級子到父(不嵌套)
+0

非常感謝你,它工作正常! – devspec

+0

大:)你可以投票(我會很高興) –

+0

我不能投票 - 我有olny 6聲譽。對不起。 – devspec