2013-06-13 2 views
1

У меня есть сущность/таблица разрешений, которая имеет отношение «один ко многим» с таблицей PermitDetails. PermitDetails содержит информацию о предельных значениях для газов, представленных в таблице Разрешений. Пределы выражаются в определенных единицах (GPerBhpHr, LbPerHr и т. Д.).Нужна помощь в написании оператора LINQ

Permits Permit Details Permit Constituent Types

У меня есть набор свойств, которые на мой взгляд DataBound к (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 единицы измерения, так что он может быть назначен на право собственности.

В некоторых случаях он возвращает нуль, а в других случаях он возвращает двойное значение. Например, в случае, когда PermitConstituentTypeId = 2, мой запрос вернет 92.2 для PpmAt15PercentOxygen. Опять же, независимо от того, является ли это возвращаемым значением null или значением, я хочу присвоить значение соответствующему свойству.

Это заявление я попытался получает мне соответствующую запись на PermitConstituentId Я хочу:

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

Но оттуда я не знаю, как начать получать значения для каждого из лимитов/метрик мне нужно, например, как PpmAt15PercentOxygen, LbPerMmBtuHHv и т. Д.

Может кто-нибудь помочь мне закончить этот оператор LINQ или изменить его, чтобы я мог отменить определенный предел/метрику на основе PermitConstituentTypeID?

ответ

1

Вы уже получаете объект (ну, коллекция сущностей) с вашим существующим предложением Where. Вы можете перебрать, что для каждой записи, которая соответствует вашему предиката и получить доступ к свойствам, которые нужны на этом объекте:

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

Если вы хотите только одну запись, делать то, что Бенджамин Gruenbaum предложил в своем ответе.

+0

Это очень полезно. Это поможет при написании метода установить эти свойства в правильные значения. –

4

Во-первых, мы выбираем первый элемент:

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

Тогда, если это не нуль, мы можем использовать его как объект

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

Теперь я чувствую себя глупо. Как только объект оттягивается назад, столбец, представляющий метрику/лимит, который я ищу, является просто свойством на этом объекте. Я не знаю, почему так трудно это увидеть. –

+1

@ IsaiahNelson Не беспокойтесь об этом, мы все время делаем эти глупые ошибки время от времени :) Помните, что LINQ to Entities почти всегда позволяет писать так же, как вы использовали LINQ для объектов (пока вы используете выражения и не вызываете внешние функции) –

Смежные вопросы