如何使用LINQ删除List C#中元素的第一次出现?

时间:2016-06-10 12:10:04

标签: c# linq list

我有以下列表

List<string> listString = new List<string>() { "UserId", "VesselId", "AccountId", "VesselId" };

我想使用Linq运算符,它只删除第一次出现的VesselId。

5 个答案:

答案 0 :(得分:4)

你不能用LINQ更改原始集合,所以最接近的是:

var index = listString.IndexOf("VesselId");
if(index>-1)
   listString.RemoveAt(index);

编辑1:

根据Igor Mesaros所做的研究,我最终实现了驻留在 List.Remove 方法中的逻辑,因此更简单的解决方案是:

listString.Remove("VesselId");

答案 1 :(得分:2)

如果您有一个简单的字符串列表或其他一些原始类型,那么您只需调用:

listString.Remove("VesselId");
@Eyal Perry提到的

如果你有一个巨大的无基元列表,这是最有效的

class MyClass
{
   string Name {get; set;}
}

var listString = new List<MyClass>() {/* Fill in with Data */};
var match = listString.FirstOrDefault(x => x.Name == "VesselId");

if(match != null)
     listString.Remove(match);

答案 2 :(得分:1)

如果你要做的是获得一个不同的列表,那么你有一个listString.Distinct()的扩展方法

答案 3 :(得分:0)

如果您绝对必须使用LINQ,您可以使用它在"VesselId"方法中查找Remove()的第一个实例,如下所示:

listString.Remove((from a in listString
                   where a == "VesselId"
                   select a).First());

答案 4 :(得分:-1)

listString = listString.Union(new List<string>()).ToList();

OR

List<string> CopyString = new List<string>();
            CopyString.AddRange(listString);
            foreach (var item in CopyString)
            {
                var index = CopyString.IndexOf(item);
                if (index >= 0 && listString.Count(cnt => cnt == item) > 1)
                    listString.RemoveAt(index);
            }