2

テーブルと 1 対多の関係を持つ Permits エンティティ/テーブルがありPermitDetailsます。PermitDetails許可表に示されているガスの制限に関する情報が含まれています。制限は特定の単位 (GPerBhpHr、LbPerHr など) で表されます。

許可 許可の詳細 許可構成要素の種類

各 PermitConstituentType とそれに対応する「制限」を表す、ビューがデータバインドされている (WPF/MVVM) プロパティのセットがあります。例えば:

    // this set of properties is duplicated for each gas type (PermitConstiutentType)
    public double NitrousOxidesPpmAt15PercentOxygen {get; set;}
    public double NitrousOxidesLbMmbtuHHV {get; set;}
    public double NitrousOxidesGbhph {get; set;}
    public double NitrousOxidesC3LbHr {get; set;}
    public double NitrousOxidesTpy {get; set;}

EF/LINQ を使用して PermitDetails テーブルをクエリし、PermitConstituentType ごとに PermitDetails の測定単位に対応する値を返し、適切なプロパティに割り当てることができるようにします。

null を返す場合もあれば、double 値を返す場合もあります。たとえば、PermitConstituentTypeId = 2 の場合、クエリは PpmAt15PercentOxygen に対して 92.2 を返します。繰り返しますが、返されるのが null であるか値であるかに関係なく、対応するプロパティに値を割り当てたいと考えています。

私が試したこのステートメントは、必要な PermitConstituentId に一致するレコードを取得します。

var noxRecord = CurrentPermit.PermitDetails.Where(a => a.PermitConstituentTypeId == 2);

PpmAt15PercentOxygenしかし、そこから、必要な各制限/メトリックの値を取得する方法がわかりませんLbPerMmBtuHHv.

PermitConstituentTypeID に基づいて特定の制限/メトリックを引き戻すことができるように、誰かがこの LINQ ステートメントを完成させるか、それを変更するのを手伝ってくれますか?

4

2 に答える 2

5

まず、最初の要素を選択します。

var noxRecord = CurrentPermit.PermitDetails
                            .FirstOrDefault(a => a.PermitConstituentTypeId == 2);

null でない場合は、オブジェクトのように使用できます。

if(noxRecord!=null){
    noxRecord.PpmAt15PercentOxygen;// This should be 92.2
}
于 2013-06-13T19:00:31.057 に答える
2

既存の Where 句を使用して、既にエンティティ (つまり、エンティティのコレクション) を取得しています。述語に一致するレコードごとにそれをループし、そのオブジェクトで必要なプロパティにアクセスできます。

foreach(var noxRecord in CurrentPermit.PermitDetails.Where(a => a.PermitConstituentTypeId == 2)
{
    var ppmAt15PercentOxygen = noxRecord.PpmAt15PercentOxygen;
}

単一のレコードのみが必要な場合は、Benjamin Gruenbaum が回答で提案したことを実行してください。

于 2013-06-13T19:06:16.627 に答える