在此处输入图像描述我正在开发 .net maui android 应用程序。 我有8000条记录这样的大数据。 一旦客户在 sqlite 数据库中安装应用程序一次,我就会保存数据,然后从数据库中检索以过滤我的数据。 我想等待查询,但我只找到 .tolist() 因为应用程序抛出 null 异常并崩溃。 tolistasync() ,它在 .net8 maui android 应用程序中可用吗? 或者我如何通过 linq 等待结果?
这是我的数据上下文类代码
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<Drug>();
List<Drug> drugs = new List<Drug>(){big data };
foreach (Drug drug in drugs)
{
Database.Insert(drug);
}
Database.CreateTable<TradeDrug>();
List<TradeDrug> TradeDrugs = new List<TradeDrug>(){ big data };
foreach (TradeDrug TradeDrug in TradeDrugs)
{
Database.Insert(TradeDrug);
}
}
public async Task<List<Drug>> LoadAllDrugsAsync()
{
init();
return Database.Table<Drug>().ToList();
}
public async Task<List<TradeDrug>> LoadAllTradeDrugsAsync()
{
init();
return Database.Table<TradeDrug>().ToList();
}
}
这是我的 HomeViewModel 类代码
public partial class HomeVM(DataContext dataContext) : BaseVM
{
private readonly DataContext _dataContext = dataContext;
[ObservableProperty]
private List<Drug> _drugs;
[ObservableProperty]
private List<TradeDrug> _tradeDrugs;
private List<Drug> DrugsWithoutFilter;
private List<TradeDrug> 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() ,它在 .net8 maui android 应用程序中可用吗? .
ToListAsync()
是 EntityFramework 包/dll 的一部分。但我在您的代码中没有看到任何 EntityFramework
引用。
但是你可以将代码切换为:
private void Init() { }
或
private async Task Init()
{
// your code here
// at the end
await Task.CompletedTask;
}
或
private Task Init()
{
// your code here
return Task.FromResult(yourResult);
}