2

我的问题与foreach 循环中的 Entity Framework Plus - FutureValue()非常相似。

我有这个代码:

public class CustomerService
{
    private readonly EntityContext Context = new EntityContext();
    
    private IQueryable<Customer> MakeQuery(object query)
    {
        return this.Context.Customers
            // Omitted more logic here to create a complex query.
            .AsQueryable();
    }

    public List<List<Customer>> GetCustomersBulk(List<object> queries)
    {
        var response = new List<List<Customer>>();
        var futureQueries = new List<QueryFutureEnumerable<Customer>>();

        foreach (var query in queries)
        {
            futureQueries.Add(
                this.MakeQuery(query: query)
                    .Future()
            );
        }
                                                
        foreach (var futureQuery in futureQueries)
        {
            response.Add(futureQuery.ToList());
        }

        return response;
    }
}

完全工作的小提琴:https ://dotnetfiddle.net/vg8pjA

但是,使用Futures似乎实际上比不使用它们要慢。

如果我尝试使用相关问题的答案,如 using FutureValue,我的查询将只返回 1 个客户而不是其中的许多。我认为使用该代码,查询在一次 DB 行程中运行,但结果不是我想要的。

我尝试使用.FutureValue<IEnumerable<Customer>>(),但随后出现此错误:

Error   CS1929  'IQueryable<Customer>' does not contain a definition for 'FutureValue' and the best extension method overload 'QueryFutureExtensions.FutureValue<IEnumerable<Customer>>(IQueryable<IEnumerable<Customer>>)' requires a receiver of type 'IQueryable<IEnumerable<Customer>>'

注意我使用的是Z.EntityFramework.Plus.EFCore版本2.0.60

4

0 回答 0