2017-01-31 1 views
0

공통 필드에 여러 목록 요소가있는 개체를 신속하게 필터링하는 방법을 찾고자합니다. 예를 들어 중요한 클래스에서 중요한 높이 및 가중치 목록이있는 경우으로 필터링 된 목록의 데이터를 반환하도록 필수 개체를 필터링하고 싶습니다.공통 필드에 여러 목록을 포함하는 개체 필터링 C#

public class VitalHeight 
{ 
    public int Id { get; set; } 
    public string Value { get; set; } 
    public string EnterDate { get; set; } 
} 

public class VitalWeight 
{ 
    public int Id { get; set; } 
    public string Value { get; set; } 
    public string EnterDate { get; set; } 
} 

public class Vital 
{ 
    public double PaientId { get; set; } 
    public List<VitalWeight> Weights { get; set; } 
    public List<VitalHeight> Heights { get; set; } 
} 

Vital vitals = controller.GetAllVitals(1234); // Get vitals by patient id 

내가 EntryDate에 의해 GetAllVitals()에서 얻은 바이탈를 필터링 할 수있는 쉬운 방법이 있나요?

PatientId: 1234 
Weights: {[Id: 1, Value: 290, EntryDate: 1/31/2017 12:34:00 PM], 
      [Id: 2, Value: 291, EntryDate: 1/31/2017 2:14:00 PM]} 
Heights: {[Id: 1, Value: 5.7, EntryDate: 1/31/2017 12:34:00 PM]} 

그래서, EntryDate="1/31/2017 12:34:00 PM"의 출력이되어야한다 :

내가 좋아하는 vitals 객체 뭔가에 데이터가 유사한 구조를 가지고 중요한 객체의 활력 징후의 많은 목록

PatientId: 1234 
Weights: {[Id: 1, Value: 290, EntryDate: 1/31/2017 12:34:00 PM]} 
Heights: {[Id: 1, Value: 5.7, EntryDate: 1/31/2017 12:34:00 PM]} 

있습니다

EntryDate에 필터링해야합니다.

linq를 사용하여이 작업을 시도했지만 제대로 이해하지 못했습니다.

, 여기에 나는 "일반적인"중요한-클래스를 사용하여 무엇을 의미하는지
+0

VitalXxx 클래스가 비슷한 구조를 가지고 있다면 왜 여러 클래스를 사용합니까? "일반"클래스를 만들어 다른 장소에서 사용할 수 있습니다. 만약 당신이 이것을하고 싶지 않다면 추상적 인 기본 클래스가 좋을 것입니다. –

답변

0

내 의견을 명확히하는 것입니다 :

public class GenericVital 
{ 
    public int Id { get; set; } 
    public string Value { get; set; } 
    public string EnterDate { get; set; } 
} 

public class Vital 
{ 
    public double PaientId { get; set; } 
    public List<GenericVital> Weights { get; set; } 
    public List<GenericVital> Heights { get; set; } 
} 

(I는 GenericVital 아마 여기 나쁜 이름을 알고 그러나, 나는 당신이 포인트를 얻을 생각합니다. .)

당신은 그때까지 날짜와 바이탈를 얻을 수 있습니다 :

var theDateYouAreLookingFor = DateTime.Now; // example date 
var vitalsYouWant = vitals.Where(v => DateTime.Parse(v.EnterDate) == theDateYouAreLookingFor); 

문제는 생명이 생명 높이 또는 바이탈 - 무게 인 경우 구별 할 수 있다는 것입니다. 차이점을 알 수 있기를 원한다면 어떤 유형인지 알려주는 속성을 클래스에 추가 할 수 있습니다 (권장하지 않음). 나는 "더 나은"솔루션에서 생각

는 추상 기본이 같은 클래스 소개하는 것입니다 : 당신은 필터링 할 수 있습니다

public abstract class VitalBase 
{ 
    public int Id { get; set; } 
    public string Value { get; set; } 
    public string EnterDate { get; set; } 
} 

public class VitalHeight : VitalBase 
{ 
} 

public class VitalWeight : VitalBase 
{ 
} 

public class Vital 
{ 
    public double PaientId { get; set; } 
    public List<VitalWeight> Weights { get; set; } 
    public List<VitalHeight> Heights { get; set; } 
} 

당신의 List<VitalBase> 이미 표시 및 반사에 의한 유형을 얻을 수 있습니다 유사한으로 GetAllVitals()에서 .

또 다른 가능성은 dynamic입니다. 그러나, 나는 이것이 과잉이라고 여기에서 생각한다.

관련 문제