需要帮助编写LINQ语句

时间:2013-06-13 18:57:29

标签: c# linq entity-framework

我有一个与PermitDetails表有一对多关系的Permits实体/表。 PermitDetails包含有关“许可证”表中所列气体限制的信息。限制以特定单位表示(GPerBhpHr,LbPerHr等...)。

Permits Permit Details Permit Constituent Types

我有一组属性,我的视图是数据绑定到(WPF / MVVM),代表每个PermitConstituentType及其相应的“限制”。例如:

    // 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);

但是从那里我不知道如何开始获取我需要的每个限制/指标的值,例如PpmAt15PercentOxygenLbPerMmBtuHHv等。

有人可以帮我完成这条LINQ语句或修改它,以便我可以根据PermitConstituentTypeID撤回特定的限制/指标吗?

2 个答案:

答案 0 :(得分:4)

首先,我们选择第一个元素:

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

然后,如果它不是null,我们可以像对象一样使用它

if(noxRecord!=null){
    noxRecord.PpmAt15PercentOxygen;// This should be 92.2
}

答案 1 :(得分:1)

您已经使用现有的Where子句获取实体(以及实体的集合)。您可以遍历与谓词匹配的每个记录,并访问该对象所需的属性:

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

如果您只想要一条记录,那就做Benjamin Gruenbaum在答案中建议的那样。