2014-02-17 37 views
1

我创建了一个属性类,它表示我的SQLite数据库的表模式。类中的每个属性都成为数据库中的一个属性。自动实现的属性类的C#泛型

class SQLiteTables 
{ 
    public class tblPerson 
    { 
     [PrimaryKey, AutoIncrement] 
     public int PersonID { get; set; } 
     public string PersonFirstName { get; set; } 
     public string PersonMiddleName { get; set; } 
     public string PersonLastName { get; set; } 
    } 

    public class tblSchedule 
    { 
     [PrimaryKey, AutoIncrement] 
     public int ScheduleID { get; set; } 
     public string ScheduleDescription { get; set; } 
     public DateTime ScheduleStart { get; set; } 
     public DateTime ScheduleEnd { get; set; } 
    } 

    //18 more table definitions below 
} 

现在,从表中检索一些数据,

public void GetPersonList() 
{ 
    List<tblPerson> lstTemp = dbConn.Table<tblPerson>().ToList<tblPerson>(); 

    // Some 20 lines of code here 
} 

我想避免编写特定类型的方法,那么这是怎样的一个乏味的任务的。我想创建一个可重用的方法,可以使用泛型实现检索任何表上的数据。我怎样才能做到这一点?

编辑我正在使用Windows Phone 8平台。

+3

的一种方法是使用ORM,像实体框架。 –

回答

1

这应该适用于你正在做的事情。

public List<T> GetItems<T>() 
{ 
    return dbConn.Table<T>().ToList<T>(); 
} 
+0

问题是如何编写'表()'方法来创建任何'T'的实例。 – Dennis

+0

我认为我们正在以不同的方式解释请求。我会支持我的回答。 –

1

你可以使用DBLinq,这对于支持SQLite的 - 那么你得到你的语法上免费的数据上下文。

public IList<T> GetList<T>() 
{ 
    return _context.GetTable<T>().ToList(); 
} 
0
public IEnumerable<T> GetItems<T>() where T: new() 
    { 
     lock (locker) { 
      return dbCon.Table<T>().ToArray(); 
     } 
    } 

我认为最关键的是“:新的()”的结尾