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