想要从列表中删除重复项,以便我的列表包含:
www.test.com
test.com
mytest.com
Run Code Online (Sandbox Code Playgroud)
我希望最终列表如下所示(仅从前面的副本中选择带有www的域):
www.test.com
mytest.com
Run Code Online (Sandbox Code Playgroud)
我有这个linq,但似乎忽略了所有没有www前面的域名,因为它只选择了www:
var result=inputList.Where(x=>x.DomainName.StartsWith("www.")).Distinct();
Run Code Online (Sandbox Code Playgroud)
编辑:
@DanielHilgarth:我只是运行你的代码并没有产生正确的结果.我有 :
test.com
www.test.com
test2.com
www.test2.com
test3.com
www.test3.com
test4.com
Run Code Online (Sandbox Code Playgroud)
在我的清单中.它返回:
test.com
www.test.com
www.test2.com
www.test3.com
Run Code Online (Sandbox Code Playgroud)
以下是我如何使用您的代码:
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;
});
Run Code Online (Sandbox Code Playgroud)
然后我做一个foreach循环来分配到新列表:
foreach (var item in result)
{
lstUniqueServerBindings.Add(new ServerBindings
{
IPAddress = item.IPAddress,
PortNumber = item.PortNumber,
DomainName = item.DomainName
});
}
Run Code Online (Sandbox Code Playgroud)
我想你想要这样的东西:
var result = domains.GroupBy(x => x.StartsWith("www.") ? x : "www." + x)
.Select(x =>
{
var domain =
x.FirstOrDefault(y => y.StartsWith("www."));
if(domain == null)
return x.First();
return domain;
});
Run Code Online (Sandbox Code Playgroud)
我用这个输入测试了它:
var domains = new List<string>
{
"www.test.com",
"test.com",
"mytest.com",
"abc.com",
"www.abc.com"
};
Run Code Online (Sandbox Code Playgroud)
结果是:
www.test.com
mytest.com
www.abc.com
Run Code Online (Sandbox Code Playgroud)
您的代码应如下所示(请注意.DomainName
第二行末尾的附加内容):
var result = lstServerBindings.GroupBy(x => x.DomainName.StartsWith("www.") ?
x.DomainName : "www." + x.DomainName)
.Select(x =>
{
var domain =
x.FirstOrDefault(y =>
y.DomainName.StartsWith("www."));
if (domain == null)
return x.First();
return domain;
});
Run Code Online (Sandbox Code Playgroud)
顺便说一句:您可以通过将代码更改为以下内容来保存自己的foreach循环:
var result = lstServerBindings.GroupBy(x => x.DomainName.StartsWith("www.") ?
x.DomainName : "www." + x.DomainName)
.Select(x =>
{
var item =
x.FirstOrDefault(y =>
y.DomainName.StartsWith("www."));
if (item == null)
item = x.First();
return new ServerBindings
{
IPAddress = item.IPAddress,
PortNumber = item.PortNumber,
DomainName = item.DomainName
};
});
Run Code Online (Sandbox Code Playgroud)