我有一个列表存储在resultlist如下:

var resultlist = results.ToList();

它看起来是这样的:

ID FirstName  LastName
-- ---------  --------
1  Bill       Smith
2  John       Wilson
3  Doug       Berg

我如何从列表中删除ID 2 ?


当前回答

List<T>有两个方法可以使用。

如果知道项的索引,可以使用RemoveAt(int index)。例如:

resultlist.RemoveAt(1);

或者你可以使用Remove(T项):

var itemToRemove = resultlist.Single(r => r.Id == 2);
resultList.Remove(itemToRemove);

当你不确定项目是否存在时,你可以使用SingleOrDefault。如果没有项目,SingleOrDefault将返回null(当Single找不到项目时将抛出异常)。当存在重复值(两个具有相同id的项)时,两者都会抛出。

var itemToRemove = resultlist.SingleOrDefault(r => r.Id == 2);
if (itemToRemove != null)
    resultList.Remove(itemToRemove);

其他回答

resultList = results.Where(x=>x.Id != 2).ToList();

有一个我喜欢的Linq小助手,它很容易实现,可以让带有“where not”条件的查询更容易阅读:

public static IEnumerable<T> ExceptWhere<T>(this IEnumerable<T> source, Predicate<T> predicate)
{
    return source.Where(x=>!predicate(x));
}

//usage in above situation
resultList = results.ExceptWhere(x=>x.Id == 2).ToList();

... 或者只是resultlist.RemoveAt(1)如果你知道确切的索引。

List<T>有两个方法可以使用。

如果知道项的索引,可以使用RemoveAt(int index)。例如:

resultlist.RemoveAt(1);

或者你可以使用Remove(T项):

var itemToRemove = resultlist.Single(r => r.Id == 2);
resultList.Remove(itemToRemove);

当你不确定项目是否存在时,你可以使用SingleOrDefault。如果没有项目,SingleOrDefault将返回null(当Single找不到项目时将抛出异常)。当存在重复值(两个具有相同id的项)时,两者都会抛出。

var itemToRemove = resultlist.SingleOrDefault(r => r.Id == 2);
if (itemToRemove != null)
    resultList.Remove(itemToRemove);

试试下面的代码:

resultlist.Remove(resultlist.Find(x => x.ID == 2));

更多的简化:

resultList.Remove(resultList.Single(x => x.Id == 2));

不需要创建一个新的var对象。