2017-09-29 1 views
2

을 사용하여 항목을 선택하려면 어떻게 쿼리나는 데이터 저장소 <img src="https://i.stack.imgur.com/v20xW.png" alt="enter image description here"></p> <p>에서 데이터를 선택하고 람다 식

var newData = data.Select(a => new IHSData 
{ 
    PriceSymbol = Convert.ToString(a.PriceId), 
    PeriodData = Convert.ToDateTime(a.ObservationVector.Select(x => x.Period).FirstOrDefault()), 
    StatusID = Convert.ToInt32(a.ObservationVector.Select(x => x.StatusId).ToList()), 
    Price = Convert.ToDouble(a.ObservationVector.Select(x => x.price).FirstOrDefault()), 
}); 

이하로 사용하여 첫 번째 배열 [0] {IHSWCFService.ServiceReference1.Observation}를 가져올 수 있어요 그러나 나는 또한 다음 배열을 선택합니다. 화면 아래 스크린 샷에서 보여주는으로 enter image description here

[0]{IHSWCFService.ServiceReference1.Observation} 
[1]{IHSWCFService.ServiceReference1.Observation} 
[2]{IHSWCFService.ServiceReference1.Observation} 

좀 도와 주 시겠어요. 감사합니다

당신은 목록으로 IHSData의 모든 속성을 할 수 있습니다
+2

스크린 샷을 검색하거나 컴파일 할 수 없습니다. 어쨌든 스크린 샷은 아무 것도 설명하지 않습니다. 'data'가 IEnumerable이라고 가정하고 적절한 Select 문을 작성했습니다. 질문은 무엇입니까? –

+0

PeriodData = Convert.ToDateTime (a.ObservationVector.Select (X => x.Period) .FirstOrDefault()에서 I는 값을 읽을 수이다.하지만, I는 다음의 값을 판독 할. [0] {IHSWCFService.ServiceReference1. 관측} – Bheesham

+0

[1] {IHSWCFService.ServiceReference1.Observation을} 나는 그래서 모든 또한 – Bheesham

답변

1

:

var newData = data.Select(a => new IHSData 
{ 
    PriceSymbol = Convert.ToString(a.PriceId), 
    PeriodData = a.ObservationVector.Select(x => Convert.ToDateTime(x.Period)).ToList(), 
    StatusID = a.ObservationVector.Select(x => Convert.ToInt32(x.StatusId)).ToList(), 
    Price = a.ObservationVector.Select(x => Convert.ToDouble(x.price)).ToList(), 
}); 

별도로 인덱스 그들에게 있기 때문에, 좋은 생각이 아니다. 그래서 또 다른 옵션은 SelectMany을 사용하는 것입니다 :

var newData = data 
    .SelectMany(a => a.ObservationVector.Select(v => 
     new IHSData 
     { 
      PriceSymbol = Convert.ToString(a.PriceId), // parent PriceId 
      PeriodData = Convert.ToDateTime(v.Period), 
      StatusID = Convert.ToInt32(v.StatusId), 
      Price = Convert.ToDouble(v.price), 
     })) 
    .ToList(); 

후자의 접근 방식은 각 ObservationVector에 대해 별도의 IHSData 인스턴스를 생성하며, 그들 중 일부는 부모 클래스의 같은 PriceId을 공유합니다.

또는 세 번째 접근법은 "는 ObservationVector의 구문 분석 된 버전"이 될 것이다, 새로운 클래스가하는 것, 즉 구문 분석 된 값에 대한 속성을 포함, 뭔가 같은 :

var newData = data.Select(a => new IHSData 
{ 
    PriceSymbol = Convert.ToString(a.PriceId), 
    Data = a.ObservationVector.Select(x => ConvertObservationVector(x)).ToList() 
}); 

ConvertObservationVector은 어디 메서드를 사용하여 ObservationVector에서 파싱 된 클래스로 변환합니다.

+0

답장을 보내 주시면 감사하겠습니다. – Bheesham

+0

나는 WhereSelectArrayIterator'2 [IHSWCFService.ServiceReference1.Observation 시스템 '형식의 개체를 캐스팅 할 수 없습니다 오류 아래 얻고있다.DateTime] '을 입력하여'System.IConvertible '을 입력하고 두 번째 approch를 사용하십시오. – Bheesham

+0

실제 클래스의 코드를 게시하지 않으면 알 수 없습니다. 툴팁이이 속성들이 문자열이 아니지만 이미 올바른 유형을 가지고 있음을 나타 내기 때문에'Convert.ToDateTime'과'Convert.ToUInt32'를 왜 사용하고 있는지 불분명합니다. 이것이 실제 코드 대신 스크린 샷을 게시하는 것이 나쁜 생각입니다. – Groo