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