2014-11-20 5 views
0
 public static int calcValueMS(FPT doc, int score) 
     { 
      return doc.PositionSection.ManagedStrategyAssets 
         .Where(a => a.AssetRiskData.RiskMeasure.RiskRating.Id == score)           
         .SelectMany(h => h.Holdings).Sum(v => v.CurrentValue); 
     } 

Мой метод возвращает сумму некоторых активов. Где они соответствуют рейтингу риска. Иногда, хотя рейтинг риска Id будет равен нулю. Я пытался использовать тернарный оператор, но, похоже, не работает.Проверьте, является ли список ienumerable равным нулю, где пункт

Как я могу проверить, равен ли первый идентификатор риска первым, а затем посмотреть, соответствует ли он значению?

+1

Почему вы хотите явно проверить, что? Действительно ли это 'Id', который является null или объектом RiskRating? – Dirk

ответ

1

RiskRating.Id кажется int?, не int, так что вы можете использовать HasValue и Value.

Вы можете объединить много Where положений в запросе Linq:

public static int calcValueMS(FPT doc, int score) 
{ 
    return doc.PositionSection.ManagedStrategyAssets 
       .Where(a => a.AssetRiskData.RiskMeasure.RiskRating.Id.HasValue) 
       .Where(a.AssetRiskData.RiskMeasure.RiskRating.Id.Value == score) 
       .SelectMany(h => h.Holdings) 
       .Sum(v => v.CurrentValue); 
} 
+0

Хотя это сообщение отвечает на вопрос, следует отметить, что он ничего не добавляет к исходному коду, поскольку дополнительная проверка ('Id.HasValue') избыточна для' Id == score'. – Dirk

1

Там нет тройной оператор просто & & -оператором:

public static int calcValueMS(FPT doc, int score) 
{ 
     return doc.PositionSection.ManagedStrategyAssets 
      .Where(a => a.AssetRiskData.RiskMeasure.RiskRating.Id != null && a.AssetRiskData.RiskMeasure.RiskRating.Id == score) 
      .SelectMany(h => h.Holdings) 
      .Sum(v => v.CurrentValue); 
} 
+2

Поскольку это, скорее всего, значение «int' /' long »с нулевым значением, вы также можете сделать« a.AssetRiskData.RiskMeasure.RiskRating.Id.HasValue' для небольшого чистого кода. – krillgar

+2

Дополнительные проверки не нужны, если 'Id' является' null ', тогда вторая проверка ('Id == score') также вернет' false'. – Dirk

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