我有以下列表
List<string> listString = new List<string>() { "UserId", "VesselId", "AccountId", "VesselId" };
我想使用Linq运算符,它只删除第一次出现的VesselId。
答案 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);
}