>

와이즈 비즈 . 매개 변수 및 ParametersDetails 클래스는-

List<ParametersDetails>

ParameterDetails 목록에 중복 이름을 가진 매개 변수가 포함되지 않아야합니다. 중복 매개 변수 이름이 발견되면 사전에서 이름을 Parametername + parameterDetails name으로 바꾸고 싶습니다. 항목을 순회하여 항목을 수정 한 다음 수정할 수는 있지만 더 적은 코드로 수행하고 싶습니다. 문제는 list ..에서 중복을 찾고 찾는 방법입니다. Linq에서 가능합니까?

지금하고있는 일-1 개의 목록에있는 모든 매개 변수를 가져 와서 중복 된 부분을 발견했습니다

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; }
   }

다음으로, 목록에서 항목을 선택합니다

var hasDupes = dflist.GroupBy(x => new { x.Name })
               .Where(x => x.Skip(1).Any()).ToArray();

이제 ParameterDetials List를 반복하여 항목을 수정하고 싶지 않습니다. 더 쉬운 방법이 있습니까?

전- ParameterDetails에 2 개의 항목이 있습니다-

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

param1을 중복 이름으로 사용하는 경우 고유 한 이름으로 "param1 + test2"로 바꾸려고합니다.

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" }] }]

  • 답변 # 1

    LINQ 를 사용할 수있는 목록에서 중복 된 항목을 찾습니다. , 이것은 그것을 사용하는 코드입니다 :

    var duplicates = dflist.GroupBy(s => s) .SelectMany(grp => grp.Skip(1));
    
    
    이 코드는 dflist 의 모든 중복 항목을 반환합니다. . 고유 한 속성 값을 가진 모든 객체를 선택하려면 다음 코드 줄을 사용하십시오.

    var withoutNameDuplicates = dflist.GroupBy(s => s.Name).Select(grp => group.First());
    
    

    그러면 Name 개체를 변경할 수 있습니다  이 코드를 사용하여 복제 된 객체에 대한 속성 :

    var nameChangedDuplicates  = duplicates.Select( s => {s.Name = s.Name + "something"; }).ToList();
    
    

    중복없이 목록에서 모든 항목을 가져 오려면 Dinstinct() 를 적용하면됩니다.   dflist 에 방법 이 메소드는 IEnumerable<T> 를 리턴합니다.  결과 :

    var withoutDuplicates = dflist.Distinct();
    
    

    그리고 List<T> 를 반환하려면  대신 IEnumerable<T> ToList() 를 사용해야합니다  다음과 같은 방법 :

    var withoutDuplicates = dflist.Distinct().ToList();
    
    

    이 페이지에서 더 자세한 정보를 얻을 수 있습니다 :

    c #-LINQ를 사용하여 목록에서 중복 항목을 얻는 방법

    Enumerable.DistinctMethod (IEnumerable)

    C #-LINQ를 사용하여 컬렉션의 모든 개체 업데이트

관련 자료

  • 이전 c# - flowLayoutPanel에서 맨 위에 자식 고정
  • 다음 mysql - 주어진 입력에 대한 최대 ID 만 선택하십시오