1

この LINQ クエリを作成するのに助けが必要です。これが私がやりたいことです - 私は 2 つのテーブルを持っています

Message
===
Name
MessageTypeID  -> Foreign Key
Date

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

私の Get API メソッドは、次の構造を持つ JSON オブジェクトを返します。

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

質問: 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);
        }
    }
}
4

1 に答える 1

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);
        }
    }
}
于 2013-02-17T04:43:41.387 に答える