2012-04-12 1 views
0

ASP.NET - 고객의 목록을 반환하는 등의 하나로서 나는 목록을 반환하는 함수와 WCF 서비스가 어떻게 페이지 데이터

[OperationContract] 
IList<Customer> GetCustomers(); 

내 ASP.NET 페이지가 할 수

var top10Customers = Model.GetCustomers().Take(10); 
var first10Customers = Model.OrderBy(c => c.ID).Take(10); 

그것은 다음과 같은 코드가 WCF 서비스에서 모든 고객을 반환하고 적용 woulld 나의 이해는 OrderByTake(10)

은 비효율적 인 것입니다 특히 WCF 서비스가 ASP.NET 웹 사이트와 다른 컴퓨터에있을 수 있으므로 전체 데이터 집합을 한 번에 반환 할 수 있습니다. 어떤 경우에 최상의 결과 집합을 페이지화하거나 LINQ 연산을 허용 할 수 있습니까? 나는 순간에 볼 수 있습니다

유일한 옵션은 함수에 페이징 옵션을 추가하는 것입니다,하지만이 코드를 항상 다시 작성하는 비효율적 인 것 같다

[OperationContract] 
IList<Customer> GetCustomers(int from, int numResults); 
+0

Take 매개 변수를 GetCustomers 메서드로 전달한 다음 그 측면에서 LINQ를 실행하여 가장 효율적인 SQL을 생성하는 것이 좋습니다. – tomasmcguinness

+0

.Net 4.5의 APIController를 사용하면 실제로 IQuerable <>을 반환하고 자동으로 페이징 및 필터링에 적합한 동작을 얻을 수 있습니다. – tomasmcguinness

+0

@tomasmcguinness 어떻게해야합니까? – Chris

답변

1

GetCustomers 메서드에 매개 변수를 추가 한 다음 가장 효율적인 SQL을 생성하기 위해 해당 측면에서 LINQ를 실행하는 것이 좋습니다. 당신은 람다 표현식으로 고통 변환 및 고객의 재산을 사용해야합니다 이후로

[OperationContract] 
IList<Customer> GetCustomers(int fromRecoard, string orderBy); 

순서 는 약간의 트릭 수 있지만 웹에 샘플 많이 있습니다.

.Net 4.5의 IQueryable에 대한 자세한 내용은 OData 섹션에있는이 블로그 게시물을 참조하십시오.

http://www.davidhayden.me/blog/asp.net-mvc-4-web-api-routes-and-apicontroller

0
[OperationContract] 
IList<Customer> GetCustomers(int from, int numResults); 

더 비효율적 무엇을 ? 몇 군데에서 코드를 변경하거나 네트 전체에서 전체 데이터 세트를 전송하여 10 행을 얻으시겠습니까?

일반적으로 LINQ가 데이터베이스에 대해 최적의 쿼리를 수행 할 수있는 서비스 측면에서 페이징을 적용하는 것이 가장 좋습니다. 서비스 시드의 페이징이 최적화되지 않은 경우에도 더 적은 양의 데이터를 다시 소비자에게 전달하여 얻을 수 있습니다.

정렬에 관해서는 클라이언트 측에서 정렬 할 수없는 이유가 없습니다. 실제로, 나는 당신이해야한다고 생각합니다, 그래서 소비자들은 그들이 적합하다고 생각하는 것을 분류 할 수 있습니다. 정렬에서 많은 이익을 얻거나 잃지는 않을 것입니다. 같은 수의 레코드가 전달되거나 정렬되거나 정렬되지 않습니다.

0

나는 GetCustomers 메서드에 매개 변수를 추가 제안하고 가장 효율적인 SQL을 생성하기 위해 그 옆에있는 LINQ를 실행하는 것?

관련 문제