想要从列表中删除重复项,如果我的列表包含:
www.test.com
test.com
mytest.com
我希望最终的列表看起来像下面这样(只选择前面重复的带有www的域名):
www.test.com
mytest.com
我有这个LINQ查询,但它似乎忽略了所有没有www前缀的域名,因为它只选择带有www的域名:
var result=inputList.Where(x=>x.DomainName.StartsWith("www.")).Distinct();
编辑:
@DanielHilgarth:我刚刚运行了你的代码,但它没有产生正确的结果。我得到的是:
test.com
www.test.com
test2.com
www.test2.com
test3.com
www.test3.com
test4.com
在我的列表中。它返回以下内容:
test.com
www.test.com
www.test2.com
www.test3.com
以下是我如何使用您的代码:
var result = lstServerBindings.GroupBy(x => x.DomainName.StartsWith("www.") ? x.DomainName : "www." + x)
.Select(x =>
{
var domain =
x.FirstOrDefault(y => y.DomainName.StartsWith("www."));
if (domain == null)
return x.First();
return domain;
});
然后我使用foreach循环将其赋值给新列表:
foreach (var item in result)
{
lstUniqueServerBindings.Add(new ServerBindings
{
IPAddress = item.IPAddress,
PortNumber = item.PortNumber,
DomainName = item.DomainName
});
}