【问题标题】:Removing data after query查询后删除数据
【发布时间】:2013-02-17 03:32:07
【问题描述】:

我需要帮助编写这个 LINQ 查询,这就是我想要做的 - 我有两个表

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

【问题讨论】:

  • “...导致异常”。什么例外?
  • 我正在使用实体框架5。

标签: c# linq datetime linq-to-entities entity-framework-5


【解决方案1】:

您不能在 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);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多