Take 연산자를 사용할 때 전체 카운트를 얻는 방법이 있습니까?LINQ가있는 테이크와 함께 카운트 사용
2
A
답변
6
당신은 둘 다 할 수 있습니다.
IEnumerable<T> query = ...complicated query;
int c = query.Count();
query = query.Take(n);
테이크 전에 카운트를 실행하기 만하면됩니다. 이 쿼리를 두 번 실행하게됩니다,하지만 그건 불가피합니다 믿습니다.
이것이 Linq2SQL 컨텍스트에있는 경우 주석에서 암시 하듯이 실제로 데이터베이스에 두 번 쿼리합니다. 게으른 로딩은 비록 쿼리의 결과가 실제로 어떻게 사용되는지에 달려 있습니다.
예를 들어: 당신이있는 경우 두 테이블은 Product
각 Product
는 외래 키를 통해 관련된 여러 ProductVersions
있다 ProductVersion
말한다.
이 쿼리 인 경우 : 당신은 그냥 Products
을 선택하지만 쿼리를 실행 한 후 있습니다
var query = db.Products.Where(p => complicated condition).OrderBy(p => p.Name).ThenBy(...).Select(p => p);
:
var results = query.ToList();//forces query execution
results[0].ProductVersions;//<-- Lazy loading occurs
당신의 부분이 아니었던 외국 키 또는 관련 객체를 참조하는 경우 원래 질의가 지연되면서로드됩니다. 단순히 int를 반환하기 때문에 카운트가 지연로드를 발생시키지 않습니다. Take()
의 결과로 실제로 무엇을하는지에 따라 지연로드가 발생할 수도 있고 그렇지 않을 수도 있습니다. 때때로 LazyLoading이 있는지 여부를 알기가 어려우면 DataContext.Log
속성을 사용하여 쿼리를 기록해야하는지 확인하십시오.
4
가장 쉬운 방법은 쿼리의 Count
을 할 수 있으며, 다음 Take
할 것 :
var q = ...;
var count = q.Count();
var result = q.Take(...);
2
단일 Linq-to-SQL 쿼리 (하나의 SQL 문만 실행)에서이 작업을 수행 할 수 있습니다. 생성 된 SQL은 으로 보이지만, 불쾌한 결과가 될 수도 있습니다. 드릴 것입니다
var result = yourQuery
.GroupBy (x => true) // This will match all of the rows from your query ..
.Select (g => new {
// .. so 'g', the group, will then contain all of the rows from your query.
CountAll = g.Count(),
TakeFive = g.Take(5),
// We could also query for a max value.
MaxAgeFromAll = g.Max(x => x.PersonAge)
})
.FirstOrDefault();
당신과 같이 데이터에 액세스 :이 경우
// Check that result is not null before access.
// If there are no records to find, then 'result' will return null (because of the grouping)
if(result != null) {
var count = result.CountAll;
var firstFiveRows = result.TakeFive;
var maxPersonAge = result.MaxAgeFromAll;
}
관련 문제
- 1. 페이지 매김과 함께 카운트 ++ 함수 사용
- 2. F #은 하스켈의 테이크와 동등한가요?
- 3. Linq 카운트 함수를 vb.net 데이터 테이블과 함께 사용
- 4. SQL의 카운트 함수 사용 문제
- 5. LINQ가있는 가변 수의 목록 조합
- 6. 엔티티에 LINQ가있는 막힘
- 7. LINQ가있는 요소 삽입
- 8. LINQ가있는 문자열에서 단어 찾기
- 9. 카운트 내에서 카운트
- 10. 카운트
- 11. 카운트
- 12. LINQ가있는 기존 목록에 속성을 삽입하십시오.
- 13. LINQ가있는 XML 열 필드에 그룹화
- 14. LINQ가있는 함수에서 값을 반환하는 방법
- 15. 단락에서 자바 스크립트 카운트 문자열 사용
- 16. 타이머에 Jquery 카운트 다운을 사용 중입니다.
- 17. lucene의 카운트 및 서브 카운트
- 18. 조회수 카운트
- 19. LINQ와 함께 FormView 사용
- 20. F와 함께 MSTest 사용 #
- 21. DataGrid와 함께 DataSet 사용
- 22. CALayer와 함께 NSScrollView 사용
- 23. CFGRID를 JQuery와 함께 사용
- 24. didSelectRowAtIndexPath와 함께 사전 사용
- 25. 변수를 Dir.glob와 함께 사용
- 26. .NET을 UnrealScript와 함께 사용
- 27. $ .ajax와 함께 facebox 사용
- 28. pthreads와 함께 gprof 사용
- 29. TTSearchBar를 TTThumbsViewController와 함께 사용
- 30. UIIavageController와 함께 UIImagePickerController 사용
당신은 여기에 다음과 같은 추가 할 수 있습니다 :이 경우
는 쿼리입니다 질문은 특별히 linq2sql에 대한 질문입니다. – luke