У меня большие данные, например 8000 записей.
Я сохраняю данные один раз в базе данных SQLite, когда клиент устанавливает app, затем я получаю данные из базы данных для фильтрации своих данных.
Я хочу дождаться запроса, но вижу только .ToList(), поскольку приложение выдает нулевое исключение и происходит сбой.
Доступна ли ToListAsync() в Приложение .net8 maui для Android или как мне дождаться результатов через linq?
Это мой код для класса datacontext
Код: Выделить всё
public class DataContext
{
private const string DbName = "IdealDiagnosisDb3";
public static string DbPath = Path.Combine(FileSystem.Current.AppDataDirectory,DbName);
private SQLiteConnection Database;
private async Task init()
{
//File.Delete(DbPath);
if (File.Exists(DbPath))
{
return;
}
Database = new SQLiteConnection(DbPath, SQLiteOpenFlags.Create | SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.SharedCache);
Database.CreateTable();
List drugs = new List(){big data };
foreach (Drug drug in drugs)
{
Database.Insert(drug);
}
Database.CreateTable();
List TradeDrugs = new List(){ big data };
foreach (TradeDrug TradeDrug in TradeDrugs)
{
Database.Insert(TradeDrug);
}
}
public async Task LoadAllDrugsAsync()
{
init();
return Database.Table().ToList();
}
public async Task LoadAllTradeDrugsAsync()
{
init();
return Database.Table().ToList();
}
}
Код: Выделить всё
public partial class HomeVM(DataContext dataContext) : BaseVM
{
private readonly DataContext _dataContext = dataContext;
[ObservableProperty]
private List _drugs;
[ObservableProperty]
private List _tradeDrugs;
private List DrugsWithoutFilter;
private List TradeDrugsWithoutFilter;
[ObservableProperty]
private string _searchName;
[ObservableProperty]
private string _placeHolderText;
[ObservableProperty]
private string _drugName;
[ObservableProperty]
private string _diagnosisId;
[ObservableProperty]
private string _diagnosisName;
[ObservableProperty]
private bool _isDrugSelected;
[ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(SearchCommand))]
private bool _isTradeRadioButtonChecked;
partial void OnIsTradeRadioButtonCheckedChanged(bool value)
{
Search();
}
[ObservableProperty]
private Drug _selectedDrug;
[ObservableProperty]
private int _countDrugs;
public async Task InitializeDrugsAsync()
{
DrugsWithoutFilter = await _dataContext.LoadAllDrugsAsync();
Drugs = DrugsWithoutFilter;
CountDrugs = Drugs.Count();
TradeDrugsWithoutFilter = await _dataContext.LoadAllTradeDrugsAsync();
TradeDrugs = TradeDrugsWithoutFilter;
IsDrugSelected = false;
IsTradeRadioButtonChecked = false;
}
[RelayCommand]
private async Task Search()
{
if (!IsTradeRadioButtonChecked)
{
PlaceHolderText = "Enter Active Ingredient";
if (!string.IsNullOrEmpty(SearchName))
{
IsBusy = true;
Drugs = DrugsWithoutFilter.Where(x => x.DrugName.ToLower().Contains(SearchName.ToLower())).ToList();
CountDrugs = Drugs.Count();
IsBusy = false;
}
else
{
Drugs = DrugsWithoutFilter;
CountDrugs = Drugs.Count();
}
}
else
{
PlaceHolderText = "Enter Trade Name";
if (!string.IsNullOrEmpty(SearchName))
{
IsBusy = true;
TradeDrugs = TradeDrugsWithoutFilter.Where(x => x.TradeDrugName.ToLower().Contains(SearchName.ToLower())).ToList();
CountDrugs = TradeDrugs.Count();
IsBusy = false;
}
else
{
TradeDrugs = TradeDrugsWithoutFilter;
CountDrugs = TradeDrugs.Count();
}
}
}
}
нет .tolistasync() в предложении Intellesense
Подробнее здесь: https://stackoverflow.com/questions/787 ... ndroid-app
Мобильная версия