두 가지 다른 방법으로 호출되는 재사용 가능한 선택 쿼리 메서드가 있습니다.선택 코드의 일부를 다시 사용하는 LINQ에서 집계 쿼리를 작성하는 방법
이들은 내 프로젝트에서 가지고있는 샘플 루틴입니다. SalesQry() 메서드는 실제로 프로젝트에서 매우 복잡합니다. SalesByState() 또는 SalesByArea() 함수가 실행 오전 데 문제가
Private IEnumerable<Sales> SalesQry(SalesDataContext sContext, int customerID)
{
return
from SALE in sContext.Sales
where SALE.CustomerID = customerID
select SALE
}
Public List<SalesAGG> SalesByArea()
{
SalesDataContext oSContext = new SalesDataContext (.....);
return from SALE in SalesQry(sContext,1230)
group SALE by
new
{
Type = SALE.SaleType,
Area = SALE.Area
} into aggAREA
select new SalesAGG()
{
Type = aggAREA.Key.Type,
Place = aggAREA.Key.Area,
TotalSales = aggAREA.Count()
}.ToList();
}
Public List<SalesAGG> SalesByState()
{
SalesDataContext oSContext = new SalesDataContext (.....);
return from SALE in SalesQry(sContext,1230)
group SALE by
new
{
Type = SALE.SaleType,
State = SALE.State
} into aggSTATE
select new SalesAGG()
{
Type = aggSTATE.Key.Type,
Place = aggSTATE.Key.State,
TotalSales = aggSTATE.Count()
}.ToList();
}
, SQL 서버 대신 그냥 행 많은 수의 반환이 부분을 실행하고, 집계 쿼리를 실행하지
from SALE in sContext.Sales
where SALE.CustomerID = customerID
select SALE
및 나머지 부분이 응용 프로그램 내에서 실행되고 있습니다. 함수 SalesQry() 을 호출하지 않고 아래와 같은 쿼리를 변경하지 않으면 SQL Server는 집계 쿼리를 실행하여 매우 적은 수의 행을 반환합니다.
from SALE in sContext.Sales
where SALE.CustomerID = 1230
group SALE by
new
{
Type = SALE.SaleType,
State = SALE.State
} into aggSTATE
select new SalesAGG()
{
Type = aggSTATE.Key.Type,
Place = aggSTATE.Key.State,
TotalSales = aggSTATE.Count()
}.ToList();
매우 복잡하고 다른 많은 장소에서 사용되기 때문에 코드를 공유해야합니다. 어떻게 SQL 서버는 함수 SalesQry를() 서버의 전체 집합 쿼리를 실행하고 또한 사용하기 위해 쿼리를 작성해야
작동 했습니까? :-) –
답장을 보내 주신 Lawrence 께 감사드립니다. 나는 당신의 제안을 시도했으나 효과가 없었습니다. 또한 SalesAGG()를 제거하고 let totalSales = aggAREA.Count()를 사용하여 "select new {Type = aggAREA.Key.Type, Place = aggAREA.Key.Area, TotalSales = totalSales} .ToList()"했습니다. 그것은 여전히 서버에서 모든 데이터를 반환하고 있습니다. – kishore
수정 사항을 참조하십시오. 'group-by'가 익명 타입 대신에 연결 문자열 값으로 변경되면 작동 할 수도 있습니다. –