【问题标题】:Filtering include items in Entity Framework过滤实体框架中的包含项
【发布时间】:2017-07-20 18:11:51
【问题描述】:

我已经阅读了这个post,并且我已经在 EntityFramework 核心中实现了一个 linq 查询。 这是c#语法:

    DateTime today = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
    var actionMenuGroup = Context.ActionMenuGroups
                  .Include(am => am.ActionMenus)
                  .Where(am => am.ActionMenus.Any(amm => amm.DeliveryDate.GetValueOrDefault(DateTime.MinValue).CompareTo(today) <= 0 && amm.AuthorizedCustomers.Any(ac => ac.CustomerId.Equals(CustomerId) && ac.DeliveryDate.GetValueOrDefault(DateTime.MinValue).CompareTo(today)<=0)))
                  .Select(g => new ActionMenuGroup()
                  {
                      Id = g.Id,
                      Name = g.Name,
                      SortOrder = g.SortOrder,
                      ActionMenus = g.ActionMenus.Where(amm => amm.DeliveryDate.GetValueOrDefault(DateTime.MinValue).CompareTo(today) <= 0 && amm.AuthorizedCustomers.Any(ac => ac.CustomerId.Equals(CustomerId) && ac.DeliveryDate.GetValueOrDefault(DateTime.MinValue).CompareTo(today) <= 0)).ToList()
                  });

一切正常! 但是,在插入 lambda 过滤器表达式后,选择出错了;这是带有 lambda 的新版本:

public Func<Model.ActionMenu, DateTime, int?, bool> filterActionMenu = (amm, oggi, CustomerId) => amm.DeliveryDate.GetValueOrDefault(DateTime.MinValue).CompareTo(oggi) <= 0 && amm.AuthorizedCustomers.Any(ac => ac.CustomerId.Equals(CustomerId) && ac.DeliveryDate.GetValueOrDefault(DateTime.MinValue).CompareTo(oggi) <= 0);

    public IQueryable<ActionMenuGroup> GetActionMenuAndMenuGroupByCustomer(int? CustomerId)
    {
        DateTime today = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day);
        var actionMenuGroup = Context.ActionMenuGroups
                  .Include(am => am.ActionMenus)
                  .Where(am => am.ActionMenus.Any(amm => filterActionMenu(amm,today, CustomerId)))
                  .Select(g => new ActionMenuGroup()
                  {
                      Id = g.Id,
                      Name = g.Name,
                      SortOrder = g.SortOrder,
                      ActionMenus = g.ActionMenus.Where(amm => filterActionMenu(amm, today, CustomerId)).ToList()
                  });
        return actionMenuGroup;
    }

有没有人有在 linq 语法中使用 lambda 的经验? 谢谢

【问题讨论】:

    标签: linq lambda include


    【解决方案1】:

    试试:

    public Expression<Func<Model.ActionMenu, DateTime, int?, bool>>  filterActionMenu = (amm, oggi, CustomerId) => ....
    

    【讨论】:

    • James,以及在 ICollection&lt;T&gt; 类型的导航属性的表达式树中如何在语法上使用它?
    猜你喜欢
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-08
    • 2023-03-08
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    相关资源
    最近更新 更多