簡體   English   中英

在實體框架 6 SelectMany to Join 選項中查詢拋出錯誤源 IQueryable 未實現 IDbAsyncEnumerable<MyModel>

[英]In entity framework 6 SelectMany to Join option for query throwing error The source IQueryable doesn't implement IDbAsyncEnumerable<MyModel>

如主題中所述,我有以下查詢引發錯誤

public async Task<IEnumerable<MyModel>> GetDataAsync()
{
    return await _context.baseTable.SelectData().AsNoTracking().ToListAsync();
}
    
public static IQueryable<MyModel> SelectData(this IQueryable<relet> baseTable)
{
    return baseTable
        .Where(h => h.table1 != null && h.table1.table2 != null)
        .Select(lev => new {
            table3Collection = lev.table1.table2.table3, //table3 is ICollection
            Table5Key = lev.table5 != null ? lev.table5.id : null,
            Table4Key = lev.table1.table2.table4 != null ?  lev.table1.table2.table4.id : null,
        }).ToList()
        .SelectMany(x => {
            return x.table3Collection.Select(h => new MyModel() {
                ContactKey = new Key
                {
                    Id = h.Id,
                    Type = h.Type
                },
                Table5Key = x.Table5Key,
                Table4Key = x.Table4Key
    
            });
        })
        .AsQueryable();
}

有人可以告訴我如何在組加入方式中使用相同的 LINQ 查詢嗎? .ToListAsync() 行出現問題

您不能從IEnumerable創建IQueryable並使用異步擴展。 實際上,您只需要更正您的查詢並刪除不必要的具體化。

public static IQueryable<MyModel> SelectData(this IQueryable<relet> baseTable)
{
    return 
        from lev in baseTable
        from t3 in lev.table1.table2.table3
        select new MyModel
        {
            ContactKey = new Key
            {
                Id = lev.Id,
                Type = lev.Type
            },
            Table5Key = (int?)lev.table5.Id,
            Table4Key = (int?)lev.table1.table2.table4.Id
        };
}

請注意,從簡化查詢中我們可以看到未使用t3 這意味着我們只是復制記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM