微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Sqlite Query<T> for xamarin.android 的正确语法

如何解决Sqlite Query<T> for xamarin.android 的正确语法

如果我想从表 Person 中选择一条记录,那么我会写这样的查询

using (var connection = new sqliteConnection(System.IO.Path.Combine(folder,"Persons.db")))  
{  
    connection.Query<Person>("SELECT * FROM Person Where Id=?",Id);  
    return true;  
}  

但是如果我想对多个表或动态表使用相同的四行怎么办?我想传递动态表名而不是人。像这样。

void SelectDataForId(string tablename,int id)
{
    using (var connection = new sqliteConnection(System.IO.Path.Combine(folder,"Persons.db")))  
    {              
        connection.Query<tablename>("SELECT * FROM "+tablename"+ Where Id=" + id);  
        return true;  
    }
}  

我也尝试使用通用类型的 T,但我猜我做错了。

void SelectDataForId<T>(T obj,string tablename,"Persons.db")))  
    {            
        var type = GetValue<T>(tablename);  
        connection.Query<type>("SELECT * FROM "+tablename"+ Where Id=" + id);  
        return true;  
    }
}  
public static T GetValue<T>(string value)
{
    return (T)Convert.ChangeType(value,typeof(T));
}

请纠正我的错误

谢谢

解决方法

根据此 SO post,您不能对表名使用参数。我们所做的是将表示所需实体记录的类作为泛型类型传入:

// IRecord is the base class for all our DB entity classes
List<T> SelectDataForId<T>(int id) where T : IRecord,new()
{
    string tableName = typeof(T).Name;
    List<T> list = _connection.Query<T>("SELECT * FROM " + tableName,id);
    return list;
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。