2015-01-16 3 views
0

Я хочу захватить элементы, где status для всех rows = 1, а также для того, чтобы CreateDate была сегодняшней датой.C# Linq-запрос с несколькими условиями, где условия

Я сгруппировал их, но я не знаю, где мне нужно, чтобы разместить CreatedDate = Сегодня

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

Я пытался добавить условие CreatedDate в предложении .гда, но он дает мне ошибку компиляции. Как исправить мой синтаксис? Merci

ответ

0

Чтобы проверить, на сегодняшний день, можно более просто сделать

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

Это простая проблема синтаксиса. Помните, что m является IGrouping<anonymous, memberType>, поэтому вашему .where необходимо будет использовать свойство .Key, чтобы перейти к реальному анонимному объекту.

Похоже, что этот

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

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

Он должен работать, как welll:

var mids= _db.Members 
     .Where(m=>m.Status==1 && m.CreatedDate==DateTime.Today) 
     .Select(m=>m); 
Смежные вопросы