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