1

我需要根据用户提供的搜索过滤器从 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);
        }
4

1 回答 1

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

抱歉,这不适用于 iqueryable。试试这个:

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

这假设 ID 永远不会为空。

您还可以构建“要删除的项目”列表并调用 .Except(itemsToRemove), OUTSIDE OF THE LOOP。在循环中修改列表有时会让您头疼;)

followUpItem = followUpItem.Except(itemsToRemove);
于 2013-03-21T21:17:31.080 回答