2014-02-18 11 views
-2

이 코드를 하지만 상관없이 쿼리 결과에 최대 값이 있습니다. 최대 값은 항상 0으로 설정됩니다.이상한 LINQ 행동

의견이 있으십니까? 하이?

+0

어떻게 디버깅에 대한? query.Any()가 반환하는 것, query.Max()는 무엇을 반환합니까? – nvoigt

+0

1)이 두 줄 사이에 다른 코드가 있습니까? 2) '테이블'이란 무엇이며 어떤 데이터가 있습니까? –

+0

질문이 비어 있지 않습니까? –

답변

4

경우, 다음 중 다음 하나에 해당 :

  1. 쿼리 결과가 반환되지 않습니다
  2. 쿼리 결과의 최대 값은 0입니다.

쿼리를 정의하고 쿼리에서 최대 값을 가져 오는 사이에 테이블을 수정할 때 첫 번째 경우가 가능합니다. 기억하십시오 - query에는 데이터가 없습니다. 이는 쿼리 정의 일 뿐이며 쿼리를 실행할 때만 데이터를 가져옵니다 (예 : Any() 또는 Max()).

테스트 :

List<long> table = new List<long> { 1, 2, 3 }; 
var query = from t in table select t; // query is not executed 
table.Clear(); // modify data source before query is executed 
Assert.False(query.Any()); // execute query on modified data source 
2

더 간단하지 않습니까?

long max = table.OrderByDescending(t => t.LongId) 
       .Select(t => t.LongId) 
       .FirstOrDefault() ?? 0; 
1

가장 쉬운 방법 :

long max = query.Any() ? query.Max() : 0; 

는 0을 반환

var maxId = table.OrderByDescending(x => x.LongId).First().LongId;