2010-05-19 5 views
2

날짜와 개수가 포함 된 개체가 있습니다. 나는 세리에하지만 시리즈의 목록을 가지고 고려목록에서 누락 된 값을 채우는 방법

public class Stat 
{ 
    public DateTime Stamp {get; set;} 
    public int Count {get; set ;} 
} 

나는 양태에서는 합계의 목록 플러스 등등 이름과 좀 더 많은 정보를 보유하고 세리에 객체 ...

public class Serie 
{ 
    public string Name { get; set; } 
    public List<Stat> Data { get; set; } 
    ... 
} 

이 모두가 동일한 우표를 포함하지는 마십시오. 누락 된 우표는 모두 계열로 채울 필요가 있습니다.

public static IEnumerable<Serie> Equalize(this IEnumerable<ChartSerie> series, int defaultCount) 

this question 같은 문제를 치료하는 것 같지만 직접 DB를 조회 할 때 :

나는 (당신이 :) 하나를 발견하면 더 좋은 이름을 제공하십시오)이 같은 서명으로 확장 방법을 생각했다. 물론 나는 날짜를 반복해서 다른 목록을 만들 수 있습니다. 그러나 이것을 달성하는 더 우아한 방법이 있습니까?

예 :

세리에 A :
2010년 1월 5일 1
2010년 5월 3일 3

세리에 B :
2010년 1월 5일 5
2010년 2월 5일 6

I 정상적으로 얻으세요 :

세리에 A :
,2010년 5월 1일 1
2010년 2월 5일 0
2010년 5월 3일 3

세리에 B :
2010년 1월 5일 5
2010년 2월 5일 6
2010년 3월 5일 0

답변

1

이것이 당신을 위해 충분히 우아 할 지 모르겠지만 ;-)하지만 Linq를 좋아하기 때문에 (이름 지정 체계를 사용하여) 내가 한 일이 있습니다 :

이 코드는 컴파일을 위해, 당신의 클래스는 생성자의 몇 필요 : 위의 코드와 함께 새로 만든 Serie -instances의 순서를 그대로 원래의 인스턴스를두고 돌아갑니다 series.Equalize(0)를 호출 할 때

public class Stat 
{ 
    public Stat() {} 

    public Stat(DateTime stamp, int count) 
    { 
     Stamp = stamp; 
     Count = count; 
    } 

    public DateTime Stamp { get; set; } 
    public int Count { get; set; } 
} 

public class Serie 
{ 
    public Serie() {} 

    public Serie(string name, IEnumerable<Stat> data) 
    { 
     Name = name; 
     Data = new List<Stat>(data); 
    } 

    public string Name { get; set; } 
    public List<Stat> Data { get; set; } 
} 

을 자신의 Data은 기본값으로 채워져 있습니다.

아무 것도 없습니다. Linq의 단맛 ... (그리고 null 통합 연산자!)

로드 및 데이터로드로이 작업을 시도하지 않았기 때문에 사용자의 근무 시간이 다를 수 있습니다.

+0

나는 유사한 해결책으로 끝냈다. linq이 정말 도움이되는지는 아직 확실하지 않습니다. 좀 더 간결하게 만들었지 만, 그 사슬의 연쇄가 무엇을하는지 이해하는 것이 얼마나 쉬운 일인가. 어쨌든, 답변 주셔서 감사합니다! –

+0

나는 귀하의 우려에 완전히 동의합니다. 나는 우아함이'Equalize' 메쏘드의 구현이 아닌 사용법에 있다고 생각합니다. 네가 끝낸 것을 공유 하는게 어때? –

관련 문제