【发布时间】: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 的经验? 谢谢
【问题讨论】: