具有多个 where 条件的 C# Linq 查询

C# Linq query with multiple where conditions

我想获取所有行状态为 1 的成员,并确保 CreatedDate 是今天的日期。

我将它们分组,但我不知道我需要将 CreatedDate = Today 放在哪里

  var mids= _db.Members
             .GroupBy(m => new { m.MemberID, m.CreatedDate })
             .Where(m => m.All(s => s.Status == 1)) //&& m.CreatedDate.Value.ToShortDateString().Equals(DateTime.Now.ToShortDateString())
             .Select(
                group => new
                {
                    MID = group.Key

                }).ToList();

我试图在 .Where 子句中添加 CreatedDate 条件,但它给我一个编译错误。如何修复我的语法?谢谢

要检查今天的情况,您可以更简单地执行

if(CreatedDate.Date == DateTime.Today)

那么,你要看钥匙:

var mids = _db.Members
         .GroupBy(m => new { m.MemberID, m.CreatedDate })
         .Where(m => m.All(s => s.Status == 1) && m.Key.CreatedDate.Date == DateTime.Today)
         .Select(
            group => new
            {
                MID = group.Key
            }).ToList();

或者您可以在 GroupBy 之前过滤它们:

var mids = _db.Members
         .Where(m => m.CreatedDate.Date == DateTime.Today)
         .GroupBy(m => m.MemberID)
         .Where(m => m.All(s => s.Status == 1))
         .Select(
            group => new
            {
                MID = group.Key
            }).ToList();

这是一个简单的语法问题。请记住,m 是一个 IGrouping<anonymous, memberType>,因此您的 .where 将需要使用 .Key 属性 来获取实际的匿名对象。

看起来像这样

.Where(m => m.All(s => s.Status == 1) 

      &&  m.Key.CreatedDate.Value.ToShortDateString()
           .Equals(DateTime.Now.ToShortDateString())

它应该也能正常工作:

var mids= _db.Members
       .Where(m=>m.Status==1 && m.CreatedDate==DateTime.Today)
       .Select(m=>m);