如何从 xamarin 中的本地数据库中检索字符串值?

How to retrieve string value from local database in xamarin?

Table结构

[Table(TableConst.TABLE_BRANDING)]
public class BrandingInfoModel
{
    public int id { get; set; }
    public string title { get; set; }
    public string primary_color { get; set; }
    public string secondary_color { get; set; }
    public string tertiary_color { get; set; }
}

从数据库获取资源的方法

    public string GetColorResourceFromDatabase(string key)
    {
        try
        {

            string value = mSqlConnection.Query<string>("SELECT " + key + " FROM data").ToString();
            return value;

        }
        catch (Exception e)
        {
            string error = e.Message;
            return null;
        }

    }

我写了returns根据SELECT查询从本地数据库取值的方法。但它 returns 为空。

而不是使用 SQL 查询来执行 select。请考虑使用 Linq 查询来获得相同的结果。

例如,如果您想要 select 出一行并获得 ID 为

的 primary_color
var rowData = mSqlConnection.Table<BrandingInfoModel>()
                            .FirstOrDefault(i => i.id == 123);
if (rowData != null)
{
    return rowData.primary_color;
}

我试过这种方法

  //Get resource from Brading table
    public BrandingInfoModel GetResourceFromDatabase(string key)
    {
        try
        {
            //string value = (from i in mSqlConnection.Table<BrandingInfoModel>() select i.menu_text_color).ToString();

            var queryResult = mSqlConnection.Query<BrandingInfoModel>("SELECT " + key + " FROM " + TableConst.TABLE_BRANDING).FirstOrDefault();
            return queryResult;

        }
        catch (Exception e)
        {
            string error = e.Message;
            return null;
        }

    }

它returns 所需的输出。

我的解决方案是创建一个支持 class PrimitiveTypeItem 并查询它。 这将不限于字符串,而是您想要的任何原始类型。

public class PrimitiveTypeItem<T>
{
    public T Value { get; set; }
}

var resultString = mSqlConnection.FindWithQuery<PrimitiveTypeItem<string>>("SELECT title AS VALUE FROM BrandingInfoModel LIMIT 1").Value;

// another example 
var resultLong = mSqlConnection.FindWithQuery<PrimitiveTypeItem<long>>("SELECT SUM(REALWONPRIZE) AS VALUE FROM SOMETHING").Value;