ASP MVC / Linq - 从查询中删除对象

时间:2013-03-21 21:11:55

标签: asp.net-mvc asp.net-mvc-3 linq

我需要根据用户提供的搜索过滤器从Linq查询中删除某些项目(在这种情况下,它将是代理的名称)。

基本上,第一个查询从相关表中获取所有信息,我需要过滤掉那些没有与指定名称相对应的名称的信息。

下面是我尝试使用的代码,但很明显followUpItems.Remove()不是一个实际的方法,只是寻找沿着这些方向的东西。由于followUpItems被定义为var而不是列表,我想知道这是否可行?

        var followUpItem = from follow in db.FollowUpItems
                           where (follow.TableName.Equals(TableName) || TableName.Equals("%")) &&
                                 (follow.IssueType.Equals(IssueType) || IssueType.Equals("%")) &&
                                 (follow.Status.Equals(Status) || Status.Equals("%"))
                           orderby follow.Id
                           select follow;

        //Set display names
        foreach (var item in followUpItem)
        {
            var key1 = int.Parse(item.Key1);

            var name = (from a in db.Agent
                               where key1 == a.SymetraNumber
                               select a).Single();

            item.DisplayName = name.FirstName + " " + name.LastName;
            if (!item.DisplayName.Equals(AgentName))
                followUpItem.Remove(item);
        }

1 个答案:

答案 0 :(得分:2)

followUpItem = followUpItem.RemoveAll(i=> i.Id == item.Id);

抱歉,这对iqueryable无效。试试这个:

followUpItem = followUpItem.Where(i=> i.Id != item.Id);

这假设Id永远不会为空。

您还可以构建一个“要删除的项目”列表并调用.Except(itemsToRemove),循环外部。修改循环中的列表有时会让你头疼;)

followUpItem = followUpItem.Except(itemsToRemove);