c# - Linq Group 通过不采用内部实体

标签 c# entity-framework linq group-by

我正在使用 Entity Framework 并通过表格进行分组。我的查询如下:-

var brokerPaymentLists = dbContext.BrokerPayments
    .Include("PaymentDetail")
    .Where(bp => bp.IdPaymentStatus == (long)EntityModel.Additions.Variables.PaymentStatus.ALLOTED)
    .GroupBy(bp => bp.IdBroker,
    (key, g) => new
    {
        IdBroker = key.Value,
        BrokerPayments = g.ToList()
    }).ToList();

我已经包含了 PaymentDetail,但是在分组之后,我可以看到 BrokerPayments 中每个项目的 paymentdetail 都是空的。关于为什么会出现这种情况的任何建议,以及我如何进行分组,以便我可以在每个 BrokerPayment 中插入我的付款详细信息;

最佳答案

使用 Include 进行预加载要求数据的形状自 Include 以来不改变被申请;被应用。在您的情况下,这意味着查询必须返回 IQueryable<BrokerPayments> .但是 GroupBy运算符更改形状,因为它返回 IQueryable<IGrouping<TKey, TSource>> .投影和自定义连接也会发生同样的情况。

作为解决方法,您可以在 LINQ to Objects 中执行分组,例如:

var brokerPaymentLists = dbContext.BrokerPayments
    .Include("PaymentDetail")
    .Where(bp => bp.IdPaymentStatus == (long)EntityModel.Additions.Variables.PaymentStatus.ALLOTED)
    .AsEnumerable()
    .GroupBy(bp => bp.IdBroker,
    (key, g) => new
    {
        IdBroker = key.Value,
        BrokerPayments = g
    });

注意:注意查询不会延迟执行

关于c# - Linq Group 通过不采用内部实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35379916/

相关文章:

c# - 禁用/刷新 OleDbConnection 缓存

c# - 无法确定类型之间关联的主体端 - Entity Framework 错误,同一类之间的类关系

c# - 单例中的 Entity Framework 上下文

c# - 使用 LINQ 仅更新一列值

c# - 在计算机休眠或 sleep 后恢复后,在 WPF 中使用什么事件来更新应用程序?

c# - ValueTuple.Equals 不返回 true

c# - ASP.net Web 表单在哪里使用 UnitOfWork 模式处理实体上下文

c# - 使用 LINQ 选择具有不同列值的行

linq - LINQ 内部如何工作?

c# - 使用 tfs api 连接到 tfs 时身份验证失败