首页 > 解决方案 > 如何使用 lambda 表达式在子集合中使用 where 条件?

问题描述

我想使用 lambda 表达式从集合列表中过滤数据。但是在使用 Fromdate 和 Todate 时,数据没有被正确过滤。它仅过滤帐户 ID 而不是日期。

这是我的 lambda 表达式:

  var query = context.Accounts
            .Include(s => s.Sales)
             .Where(a => a.Type == "C" && a.Sales.Count != 0).AsQueryable();

        if (filter.AccountId.HasValue)
        {
          query = query
                    .Where(a => a.Sales.Any(s => (s.AccountId == filter.AccountId))).AsQueryable();

            query = query.Where(a => a.Sales.Any(s => s.TransactionDate >= filter.FromDate.Date && s.TransactionDate <= filter.ToDate.Date));
        }

        if (!filter.AccountId.HasValue && (filter.FromDate.Date != DateTime.Now.Date || filter.ToDate.Date != DateTime.Now.Date))
        {
            query = query
           .Where(a => a.Sales.Any(s => s.TransactionDate >= filter.FromDate.Date && s.TransactionDate <= filter.ToDate.Date));
        }

        return await query.ToListAsync();

标签: c#linq.net-core

解决方案


推荐阅读