2013-10-30 4 views
1

열이있는 테이블이 있습니다 OneStopPrice; MultiStopPrice; NonStopPrice. 3 열 모두에 Min()을 갖고 싶습니다. 그러나 임의의 열의 Min()이 0이면 무시해야합니다.0이 아닌 값의 Linq Min()

OneStop | NonStop | MultiStop 
----------------------------- 
233.23 | 0.0  | 355.23 

여기서 NonStop은 무시할 수 있도록 최대 값으로 간주되어야합니다.

누구나 LinQ을 사용하여이 아이디어가 있습니까?

var data = odyResults.GroupBy(logEle => new { logEle.Air.FromCity, logEle.Air.ToCity }, (key, group) => new{ 
     FromCity = key.FromCity, 
     ToCity = key.ToCity, 
     OneStopPrice = group.Min(x=>x.Air.OneStopPrice), 
     MultiStopPrice = group.Min(x => x.Air.MultiStopPrice), 
     NonStopPrice = group.Min(x => x.Air.NonStopPrice), 
     FromToCityCount = group.Count() 
     }); 
+0

당신은 * 무시 * 무엇을 의미합니까 다음과 같이

나는 쿼리를 사용했다? 속성이 익명 객체에 나타나서는 안됩니까? –

+4

'group.Where (c => c.OneStopPrice! = 0) .Min (c => c.OneStopPrice)'? 확실하지 않은, 당신이 무엇을하려고하는지. – Leri

+0

무시 된 값은 가장 낮은 값 옆에있는 값을 원한다는 의미입니다. 0이 아닌 값의 Min()을 의미합니다. –

답변

2

는 그냥 0을 필터링 :

NonStopPrice = group.Where(x => x.Air.NonStopPrice > 0) 
        .Min(x => x.Air.NonStopPrice), 
+0

그것은 나에게 오류를 준다 - 시퀀스는 요소가 없다. –

+0

그것은'group.Where (x => x.Air.NonStopPrice> 0)'이 비어 있기 때문에 적절하게 처리해야한다. –

+0

당신은 이것을 시도 할 수 있습니다 :'group.Select (x => x.Air.NonStopPrice) .Where (p => p> 0) .DefaultIfEmpty(). Min()' –

관련 문제