XamarinForms Exception - PullRequest
       10

XamarinForms Exception

0 голосов
/ 03 июня 2018

Я создал панель поиска с подключением к базе данных.Когда я запускаю это.Это исключение.я использую базу данных, созданную ранее.

Записи класса модели

public class entries
{
    public entries()
    {

    }

    public entries(string word)
    {
        this.word = word;
    }
    public entries(string word, string wordtype, string definition)
    {
        this.word = word;
        this.wordtype = wordtype;
        this.definition = definition;
    }   
    public string word
    { get; set; }

    public string wordtype
    { get; set; }

    public string definition
    { get; set; }

    public List<string> GetWord { get; set; }
}

Класс DatabaseManager:

public class DatabaseManager
{
    SQLiteConnection dbConnection;
    public DatabaseManager()
    {
        dbConnection = DependencyService.Get<ISQLite>().GetConnection();
    }



    public List<string> GetWord()
    {
        return dbConnection.Query<string>("Select word From [entries]").ToList();
    }


}

MainPage.xaml.cs:

    DatabaseManager dbManager = new DatabaseManager();
 private void MySearchBar_SearchButtonPressed(object sender, EventArgs e)
        {

        }

        private void MySearchBar_TextChanged(object sender, TextChangedEventArgs e)
        {
            var keyword = MySearchBar.Text;
            if(keyword.Length >= 1) { 
                var suggestions = dbManager.GetWord().Where(c => c.ToLower().Contains(keyword.ToLower()));

                SuggestionListView.ItemsSource = suggestions;
                SuggestionListView.IsVisible = true;
            }
            else
            {
                SuggestionListView.IsVisible = false;
            }
        }

Это исключение:

System.MissingMethodException: конструктор типа 'System.String' не найден.

Пожалуйста, помогите.Огромное спасибо.

1 Ответ

0 голосов
/ 04 июня 2018

Возможно, вы создали сущность для таблицы «записи», например, это так:

[Table (“entries”)]
public class Entries
{
    …

    [Column (“word”)]
    public string Word;

    …
}

, затем измените строку

dbConnection.Query<string>("Select word From [entries]").ToList();

на

dbConnection.Table<Entries>().Select(x => x.Word).ToList();

Это устранит необходимость создания одного дополнительного класса, как суши сказали в комментарии выше.

Более того, следующая строка выдаст NullReferenceException в c.ToLower(), если любое из слов содержит Null в таблицу.

dbManager.GetWord().Where(c => c.ToLower().Contains(keyword.ToLower()));

Таким образом, чтобы избавиться от этого, выберите результаты, которые не имеют нулевых значений, например,

dbConnection.Table<Entries>().Where(x => x.Word != null).Select(x => x.Word).ToList();
...