C# SQLite - лучший способ получить значения из одной строки - PullRequest
0 голосов
/ 13 марта 2020

Какой лучший способ получить данные столбца из одной строки? Например; Я запускаю запрос, но я знаю, что он вернет мне только 1 строку. Из этого я хочу получить детали столбца. На данный момент я помещаю ToList, а затем делаю foreach. Но это швы чрезмерны, когда есть только 1 ряд. Как мне добраться до «элементов» без foreach?

class inProgress
{
    [PrimaryKey, AutoIncrement]
    public int ID { get; set; }
    public bool Active { get; set; }
    public bool whatIsActive { get; set; }
    public DateTime whatTime { get; set; }
}

Код для получения значений:

using (SQLite.SQLiteConnection conn = new SQLite.SQLiteConnection(App.DB_PATH))
 {
     var row = conn.Table<inProgress>().Where(v => v.ID.Equals(1)).ToList();
     foreach (var items in row)
     {
       isActive = items.Active;
       whatIsActive = items.whatIsActive;
       time = items.whatTime;
     }
 }

Я знаю, что получу только 1 строку, поэтому я должен проходить через foreach ??

Вторая часть.

Я предпочитаю использовать команды SQL в виде строк (как показано ниже), но это кажется только хорошим в возвращении единственного значения. Опять же, как мне получить одну строку и получить доступ ко всем значениям в ней, или если она вернула несколько строк?

using (SQLite.SQLiteConnection conn = new SQLite.SQLiteConnection(App.DB_PATH))
{
   var sqlQuery = conn.CreateCommand("select * from inProgress where ID = ?", 1);
   var result = sqlQuery.ExecuteScalar<int>();
}

Заранее спасибо за помощь.

1 Ответ

0 голосов
/ 13 марта 2020

Чтобы убедиться, что вы получаете только одну строку, вы должны использовать код @ Chetan в запросе.

Чтобы получить значения без необходимости делать a для l oop, вы можете использовать это:

using (SQLite.SQLiteConnection conn = new SQLite.SQLiteConnection(App.DB_PATH))
 {
     var row = conn.Table<inProgress>().Where(v => v.ID.Equals(1)).FirstOrDefault();
     isActive = row.Active;
     whatIsActive = row.whatIsActive;
     time = row.whatTime;
 }

Для второй части вам нужно будет установить ограничение в один ряд. Я предполагаю, что ваша структура таблицы имеет идентификатор в качестве уникального ключа, поэтому он должен быть хорошим, но я добавил LIMIT 1 в запросе на безопасность. Я использовал библиотеку sqlite- net.

using (SQLite.SQLiteConnection conn = new SQLite.SQLiteConnection(App.DB_PATH))
{
   var sqlQuery = conn.Query("select Active, whatIsActive, time from inProgress where ID = ? LIMIT 1;", 1).FirstOrDefault();
   isActive = sqlQuery.Active;
   whatIsActive = sqlQuery.whatIsActive;
   time = sqlQuery.whatTime;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...