C# linq查询中的竞速条件

C# linq查询中的竞速条件,c#,linq,sqlite,async-await,C#,Linq,Sqlite,Async Await,我有一个竞赛条件和下面的项目查询。select miIds.ItemId不会等待allItemList数据库调用完成返回所有结果。解决这个问题的最佳方法是什么?我应该将查询从任务中拉出并等待它返回,然后再开始查询,还是可以在查询中执行某些操作使其等待? 多谢各位 private async Task LoadData() { // Query Mission_Item Ids. var missionItemsList = await App.Da

我有一个竞赛条件和下面的项目查询。select miIds.ItemId不会等待allItemList数据库调用完成返回所有结果。解决这个问题的最佳方法是什么?我应该将查询从任务中拉出并等待它返回,然后再开始查询,还是可以在查询中执行某些操作使其等待? 多谢各位

    private async Task LoadData()
    {
        // Query Mission_Item Ids.
        var missionItemsList = await App.Database.GetTableAsync<Mission_Items_Model>();
        var missionItemIds = from missionItem in missionItemsList
                             where missionItem.MissionId == game.CurrentMissionId
                             select missionItem;

        // Query All Items, select item where item's itemIds match mission's itemIds.
        var allItemList = await App.Database.GetTableAsync<ItemModel>();
        var items = from item in allItemList
                    let mi = (from miIds in missionItemIds where miIds.ItemId == item.Id select miIds.ItemId)
                    where mi.Contains(item.Id)
                    select item;

        // Item list for mission.
        ItemsList = new List<ItemModel>(items);

        ...

    }
private async Task LoadData()
{
//查询任务单元项目ID。
var mslist=wait App.Database.GetTableAsync();
var missinetids=来自missinetimslist中的missinetim
其中missionItem.MissionId==game.CurrentMissionId
选择密宗;
//查询所有项目,选择项目ID与任务项目ID匹配的项目。
var allItemList=wait App.Database.GetTableAsync();
var items=来自allItemList中的项目
让mi=(从Missindise中的miid中,其中miid.ItemId==item.Id选择miid.ItemId)
其中mi.Contains(item.Id)
选择项目;
//任务物品清单。
ItemsList=新列表(项目);
...
}

您的问题很简单,它是由于使用了
var
而导致的,它隐藏了查询
missineids
未被枚举。要使该查询实际执行,您需要使用具体化序列的调用(
.ToList()
例如):


当您实际实现结果时,
game.CurrentMissionId
似乎正在发生变化。

您如何使用
等待
并具有竞赛条件?你确定你理解这个问题吗?谢谢!当我运行代码时,MSList每次都返回随机数目的对象。如果我注释掉linq查询,那么MSList总是返回正确的项目计数。我认为select miIds.ItemId强制数据库调用同步运行。我现在明白了,这没有什么意义,我真正想要选择的是item.Id而不是miid.ItemId。
var missionItemIds = (from missionItem in missionItemsList
                     where missionItem.MissionId == game.CurrentMissionId
                     select missionItem).ToList();