0

I've read this post and i've implemented in EntityFramework core a linq query. Here is c# syntax:

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

and all works fine! however, after inserting a lambda filter expression the select goes wrong; here is new version with 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;
    }

Has enyone exprerience on using lambda into linq syntax? Thanks

Fabio Borghi
  • 23
  • 1
  • 6

1 Answers1

0

Try:

public Expression<Func<Model.ActionMenu, DateTime, int?, bool>>  filterActionMenu = (amm, oggi, CustomerId) => ....
James Curran
  • 101,701
  • 37
  • 181
  • 258
  • James, and how syntactically it can be used inside expression tree on navigation property of type `ICollection`? – Ivan Stoev Jul 20 '17 at 18:53