Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用字典中的唯一字符串替换重复项<;字符串,列表<;对象>&燃气轮机;_C#_Linq - Fatal编程技术网

C# 用字典中的唯一字符串替换重复项<;字符串,列表<;对象>&燃气轮机;

C# 用字典中的唯一字符串替换重复项<;字符串,列表<;对象>&燃气轮机;,c#,linq,C#,Linq,我有列表。Parameters和ParametersDetails类如下- public class ParameterDetails { public string Name { get; set; } public List<Parameter> Parameters{get;set;} } public class Parameter { public string Name { get; set;

我有
列表
。Parameters和ParametersDetails类如下-

public class ParameterDetails
    {
        public string Name { get; set; }
        public List<Parameter> Parameters{get;set;}
   }
    public class Parameter
    {
        public string Name { get; set; }
        public string Type { get; set; }      
        public string Value { get; set; }
        public string AccountName { get; set; }
   }
接下来,我从列表中选择项目

parameterdetails.Select(x => x.Parameters.Where(p => p.Name == dupeList.Key.ToString())).ToList();

现在,我不想通过参数detials列表来修改这些项。 有更简单的方法吗

前 我在ParameterDetails中有两项,如-

ParameterDetails:
[
{
 name: "test1",
 Parameters:[
{
"Name":"param1",
"Type":"paramtype1",
"Value":"value1",
"AccountName":"accname1"
},
{
"Name":"param2",
"Type":"paramtype2",
"Value":"value2",
"AccountName":"accname2"
}]
},
{
 name: "test2",
 Parameters:[
{
"Name":"param1",
"Type":"paramtype11",
"Value":"value11",
"AccountName":"accname11"
},
{
"Name":"param2",
"Type":"paramtype22",
"Value":"value22",
"AccountName":"accname22"
}]
}]

如果我使用param1作为重复名称,因此我希望将其替换为“param1+test2”,这样它将是唯一的。

如果您在列表中发现重复项,您可以使用
LINQ
,这是使用它的代码:

var duplicates = dflist.GroupBy(s => s) .SelectMany(grp => grp.Skip(1));
该代码将返回
dflist
中的所有重复项。如果要选择具有唯一属性值的所有对象,可以使用以下代码行:

var withoutNameDuplicates = dflist.GroupBy(s => s.Name).Select(grp => group.First());
然后,您可以使用以下代码将objects
Name
属性更改为复制的对象:

var nameChangedDuplicates  = duplicates.Select( s => {s.Name = s.Name + "something"; }).ToList();
如果只想从列表中获取不重复的所有项目,可以将
Dinstinct()
方法应用于
dflist
,该方法将返回
IEnumerable
结果:

var withoutDuplicates = dflist.Distinct();
而且,如果要返回
列表
而不是
IEnumerable
,则必须使用
ToList()
方法,如下所示:

var withoutDuplicates = dflist.Distinct().ToList();
您可以在以下页面中获得更多信息:


关键是什么?当然可以。您能告诉我们您已经尝试了什么以及您的具体问题在哪里吗?在所有列表中或在每个列表中重复?如果是第二个,为什么不创建一个
字典
,其中内部字典的键是参数名?请查看我已修改的代码“现在我不想通过参数列表循环修改项目”为什么不?循环是修改集合中项目的完美工具。不要为此使用LINQ,它应该仅用于查询某些内容。我没有将整个项作为重复项,我只有名称重复项来自参数
var withoutDuplicates = dflist.Distinct().ToList();