2017-05-10 67 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