.tolistasync() ,它在 .net8 maui android 应用程序中可用吗?

问题描述 投票:0回答:1

在此处输入图像描述我正在开发 .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 应用程序中可用吗? .

c# android .net async-await maui
1个回答
0
投票

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);
 }
© www.soinside.com 2019 - 2024. All rights reserved.