C# 错误:IAsyncEnumerable不能用于实体框架上IEnumerable类型的参数
我有两个LINQ表达式。我正在使用实体框架。唯一的区别是这些项目在梳棉机列表上的位置 第一个示例首先返回来自“MemberAdditionalCards”的附加卡,然后添加存储在Members表中的卡 第二个示例则相反,首先获取存储在Members表上的卡,然后获取来自“MembersAdditionalCards”的附加卡 第一林克:C# 错误:IAsyncEnumerable不能用于实体框架上IEnumerable类型的参数,c#,entity-framework,linq,asynchronous,linq-method-syntax,C#,Entity Framework,Linq,Asynchronous,Linq Method Syntax,我有两个LINQ表达式。我正在使用实体框架。唯一的区别是这些项目在梳棉机列表上的位置 第一个示例首先返回来自“MemberAdditionalCards”的附加卡,然后添加存储在Members表中的卡 第二个示例则相反,首先获取存储在Members表上的卡,然后获取来自“MembersAdditionalCards”的附加卡 第一林克: members = await _context.Members .Where(s => EF.F
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();
members=wait\u context.members
.Where(s=>EF.Functions.Like(s.FirstNames,searchTerm))
.选择(s=>新成员
{
Id=s.Id,
CardDS=s.MemberAdditionalCards
.选择(m=>new AdditionalCard
{
卡迪德=m.卡迪德
})
.工会(新名单)
第一个LINQ表达式工作正常,但不是我希望列表中的项的结果
对于第二个LINQ表达式:如果我从第二个表达式中删除“await”关键字,最后我使用ToList()而不是tolistsync(),它工作得很好。我确实理解问题在于异步执行。但是如何使最后一位作为异步执行,以及为什么第一个LINQ表达式不会出现此问题
谢谢!它正在抱怨这部分:
.Union(s.MemberAdditionalCards
.Select(a => new AdditionalCard
{
CardId = a.CardId
}))
由于您在列表(即IEnumerable
)上执行Union
,因此Union
将只接受IEnumerable
作为参数。但是s.MemberAdditionalCards.Select()
返回iasyncnumerable
我不确定它是否会喜欢Linq表达式中的await
,因此如果不喜欢,请删除await
,并将ToListAsync()
更改为ToList()
:
我不确定生成的SQL是什么样子。有人可能会有更好的主意。如果希望在单个查询中解析linq,最好删除select表达式中的所有.ToList()调用
试试这个:
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
}))
})
.AsNoTracking()
.ToListAsync();
members=wait\u context.members
.Where(s=>EF.Functions.Like(s.FirstNames,searchTerm))
.选择(s=>新成员
{
Id=s.Id,
Cardds=新列表
{
新附加卡
{
卡迪德=s.卡迪德
}
}
.工会(s.会员)附加卡
.选择(a=>新的附加卡
{
卡迪
}))
})
.AsNoTracking()
.ToListAsync();
感谢您的回复。我在LINQ中尝试了“等待”,但它不喜欢。由于我没有等待,.ToListSync()没有出现,我想我也尝试了,但没有成功。显示了相同的错误
.Union(await s.MemberAdditionalCards
.Select(a => new AdditionalCard
{
CardId = a.CardId
}).ToListAsync())
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
}))
})
.AsNoTracking()
.ToListAsync();