2013-02-17 8 views
1

мне нужна помощь в написании этого запроса LINQ, вот что я хочу сделать - у меня есть две таблицыУдаление данных после запроса

Message 
=== 
Name 
MessageTypeID -> Foreign Key 
Date 

MessageType 
=== 
ID **(the foreign key) 
Name 

Мой метод Get API возвращает объект JSON со следующей структурой:

- List<MessageType> 
- Name 
- List<Message> 

Вопрос: Я хотел бы, чтобы список сообщений в объекте messagetype был отфильтрован, чтобы включать только сообщения с датой, которая меньше, чем сегодня.

Мое первое решение состояло в том, чтобы сделать следующее - но это просто возвращает первый объект messagetype много раз.

var mt = from m in db.MessageType 
     join l in db.Message on m.MessageTypeID equals l.MessageTypeID 
     where m.SenderID == id && l.Date < DateTime.Now 
     select m; 
return mt.AsEnumerable(); 

Затем я попытался удалить соединение и удалить данные после запроса, но это вызвало исключение.

var myList = mt.ToList(); 
foreach (var mtype in myList) 
{ 
    foreach (var mess in mtype.LibMessages) 
    { 
     if (mess.VisibleEndDate < DateTime.Now) 
     { 
      // remove expired message. 
      mtype.LibMessages.Remove(mess); 
     } 
    } 
} 
+0

«... вызвала исключение». Какое исключение? – abatishchev

+0

Я использую сущность framework 5. – GMan

ответ

0

Вы не можете изменить коллекцию Ваш, итерация на в ForEach Пожалуйста, измените внутреннюю петлю следующим образом:

var myList = mt.ToList(); 
foreach (var mtype in myList) 
{ 
    foreach (var mess in mtype.LibMessages.ToList()) 
    { 
     if (mess.VisibleEndDate < DateTime.Now) 
     { 
      // remove expired message. 
      mtype.LibMessages.Remove(mess); 
     } 
    } 
} 
+0

Спасибо, кучи! что сработало для меня :) – GMan

Смежные вопросы