2017-01-31 7 views
0

一般的なフィールドに複数のリスト要素を持つオブジェクトをフィルタする簡単な方法があるかどうかを調べようとしています。たとえば、重要なクラスに重要な高さと重さのリストがある場合、重要なオブジェクトをフィルタリングして、リスト内のデータをEntryDateでフィルタリングして返したいとします。一般的なフィールドに複数のリストを含むオブジェクトをフィルタする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()からもらったバイタルをフィルタリングする簡単な方法はありますか?

私はvitalsオブジェクト内のデータにのようなものがあります。

だから、
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"ための出力は次のようになります。

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

iは「汎用」の重要なクラスを使用することにより、どのような意味です:

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

(私は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; } 
} 

あなたは既に示したように同様のGetAllVitals()からあなたList<VitalBase>をフィルタリングすることができますし、反射によって種類を取得することができます。

もう1つの可能性はdynamicです。しかし、私はそれがここで過度になると思います。

関連する問題