Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 错误:IAsyncEnumerable不能用于实体框架上IEnumerable类型的参数_C#_Entity Framework_Linq_Asynchronous_Linq Method Syntax - Fatal编程技术网

C# 错误:IAsyncEnumerable不能用于实体框架上IEnumerable类型的参数

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

我有两个LINQ表达式。我正在使用实体框架。唯一的区别是这些项目在梳棉机列表上的位置

第一个示例首先返回来自“MemberAdditionalCards”的附加卡,然后添加存储在Members表中的卡

第二个示例则相反,首先获取存储在Members表上的卡,然后获取来自“MembersAdditionalCards”的附加卡

第一林克:

            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();