2

나는 모든 ID의 목록을 가지고있다.

//암호

List<IAddress> AllIDs = new List<IAddress>();
AllIDs= AllIDs.Where(s => s.AddressId.Length >= s.AddressId.IndexOf("_"))
              .Select(s => s.AddressId.Substring(s.AddressId.IndexOf("_")))
              .ToList();

위의 LINQ 쿼리를 사용하고 있지만 컴파일 오류가 발생합니다.

//오류

암시 적으로 System.Collections.Generic.List 형식을 변환 할 수 없습니다.   System.Collections.Generic.List

구성원 필드에서 하위 작업을 수행하려고합니다.AddressId문자 "_"를 기반으로합니다.

내가 어디서 잘못한거야?


  • 다음을 지정하려고합니다.List<string>List<IAddress>... - Patryk Ćwiek

3 답변


3

당신은 원하는 주소를 찾을 수 있습니다. 그러나 그 다음 당신은 id로부터 어떤 문자열을 선택합니다.

s.AddressId.Substring(s.AddressId.IndexOf("_")) is string

Select(s => s.AddressId.Substring(s.AddressId.IndexOf("_"))).ToList(); 하위 문자열 목록을 반환합니다.

그냥 제거하고 사용하십시오.

AllIDs= AllIDs.Where(s => s.AddressId.Length >= s.AddressId.IndexOf("_")).ToList()

같이

Where(s => s.AddressId.Length >= s.AddressId.IndexOf("_")) 

AllID 목록을 필터링하지만IAddress에스

당신이 재 작성하면 이런 문제가 무엇인지 볼 수 있어야합니다.

너는 말했다.

var items  = from addr in AllIds 
             where addr.AddressId.Length >= addr.AddressId.IndexOf("_") // filter applied
             select addr.AddressId.Substring(s.AddressId.IndexOf("_")); // select a string from the address

AllIDs = items.ToList(); // hence the error List<string> can't be assigned to List<IAddress>

하지만 니가 원했어.

var items  = from addr in AllIds 
             where addr.AddressId.Length >= addr.AddressId.IndexOf("_") // filter applied
             select addr;                        // select the address

AllIDs = items.ToList(); // items contains IAddress's so this returns a List<IAddress>


1

업데이트하려는 경우AddressIdLinq 쿼리를 사용하면 다음과 같이 할 수 있습니다.

AllIDs.Where(s => s.AddressId.Length >= s.AddressId.IndexOf("_"))
      .ToList()
      .ForEach(s => s.AddressId = s.AddressId.Substring(s.AddressId.IndexOf("_")));

유의 사항.각각()Linq 확장은 아니지만 클래스 List의 메소드는 < T>.

IndexOf가 시간 소모적 일 수 있으므로 값 캐싱에 대해 생각해보십시오.

AllIDs.Select(s => new { Address = s, IndexOf_ = s.AddressId.IndexOf("_") })
      .Where(s => s.Address.AddressId.Length >= s.IndexOf_ )
      .ToList()
      .ForEach(s => s.Address.AddressId = s.Address.AddressId.Substring(s.IndexOf_ ));


0

선택 작업.Select(s => s.AddressId.Substring(s.AddressId.IndexOf("_")))객체를 수정하지 않으면 각 객체를 하위 문자열로 투영합니다. 그러므로.ToList()~을 반환합니다.List<string>.

관련된 질문

최근 질문