我有这两个 LINQ 表达式。我正在使用实体框架。唯一的区别是项目在 CardIds 列表中的位置。
第一个示例首先返回来自“MemberAdditionalCards”的 AdditionalCards,然后添加存储在 Members 表中的 Card。
第二个示例则相反,首先获取存储在 Members 表中的 Card,然后获取来自“MembersAdditionalCards”的 AdditionalCards。
第一个 LINQ:
members = await _context.Members
.Where(s => EF.Functions.Like(s.FirstNames, searchTerm))
.Select(s => new Members
{
Id = s.Id,
CardIds = s.MemberAdditionalCards
.Select(m => new AdditionalCard
{
CardId = m.CardId
})
.Union(new List<AdditionalCard>
{
new AdditionalCard
{
CardId = s.CardId
}
})
.ToList()
})
.AsNoTracking()
.ToListAsync();
第二个LINQ:
members = await _context.Members
.Where(s => EF.Functions.Like(s.FirstNames, searchTerm))
.Select(s => new Members
{
Id = s.Id,
CardIds = new List<AdditionalCard>
{
new AdditionalCard
{
CardId = s.CardId
}
}
.Union(s.MemberAdditionalCards
.Select(a => new AdditionalCard
{
CardId = a.CardId
}))
.ToList()
})
.AsNoTracking()
.ToListAsync();
使用第二个 LINQ 我有一个错误:
第一个 LINQ 表达式工作正常,但不是我想要的列表结果中的项目。
使用第二个 LINQ 表达式:如果我从第二个表达式中删除“await”关键字,最后我执行 ToList() 而不是 ToListAsync() 它工作得很好。我确实理解问题是异步执行。但是我怎样才能使最后一位异步执行,为什么第一个 LINQ 表达式不会发生这个问题?
谢谢!