2012-06-18 6 views
2

내 프로그램에서 청구서 당 한 행을 표시해야하지만 한 가지 청구서에는 두 개 이상의 보조 청구서가 있습니다. 하나의 DataGridView에서 두 테이블의 정보를 그룹화하고 싶습니다. 1 행에는 모든 하위 지폐에 대한 그룹화 된 정보가 표시되어야합니다. "설명"및 "합"의 두 열만 다른 열보다 복잡합니다. "Description"은 하위 지폐의 모든 ​​설명을 포함해야하며 개행으로 구분되어야합니다. 나는 그것을 다음 방향으로 만들었다 :어떻게 linq 쿼리를 단축 할 수 있습니까?

var documentQuery = (from doc in entities.Bas_DocumentData 
       select new 
         { 
          DocumentNum = doc.DocumentNum, 
          DocumentDate = doc.DocumentDate, 
          Description = doc.Bas_BonusData.Select(t => t.Description), 
          BillsCount = doc.Bas_BonusData.Count, 
          SupplierNum = doc.Bas_BonusData.Select(cred => cred.SupplierNum).FirstOrDefault(), 
          Debitor = doc.Bas_BonusData.Select(deb => deb.DebitorNum).FirstOrDefault(), 
          Manager = doc.Bas_BonusData.Select(manager => manager.ManagerName).FirstOrDefault(), 
          SupplierName = doc.Bas_BonusData.Select(supp => supp.SupplierName).FirstOrDefault(), 
          Sum = doc.Bas_BonusData.Sum(bill => bill.Price), 
          IsPrinted = doc.isPrinted, 
          IsSent = doc.isSent, 
          NotSummarize = doc.NotSummarize 
         }).OrderBy(key => key.DocumentNum) 
         .ToList() 
         .Select(q => new AcceptedBonusProjection 
         { 
          DocumentNum = q.DocumentNum, 
          DocumentDate = q.DocumentDate, 
          Description = String.Join("\n\r", q.Description.ToArray()), 
          BillsCount = q.BillsCount, 
          SupplierNum = q.SupplierNum, 
          Debitor = q.Debitor, 
          Manager = q.Manager, 
          SupplierName = q.SupplierName, 
          Sum = q.Sum, 
          IsPrinted = q.IsPrinted, 
          IsSent = q.IsSent, 
          NotSummarize = q.NotSummarize 
         }); 

나의 목표를 달성하는 더 좋은 방법이 있습니까? 어떤 방법으로이 쿼리를 단축 할 수 있습니까?

답변

4

상반기 (. anony 구조체는) 전혀 필요하지 않습니다 :

var documentQuery = 
    entities.Bas_DocumentData 
    .OrderBy(key => key.DocumentNum) 
    .Select(q => new AcceptedBonusProjection 
         { 
          DocumentNum = q.DocumentNum, 
          /* same as in your select snipped here as it does not add value */ 
          NotSummarize = q.NotSummarize 
         }) 
    .ToList(); 

비고 : 은 당신이 잘 확장되지 수있는 몇 가지 서브 쿼리가 (쿼리에 다른 테이블에서 선택 할 수 있습니다 예 : doc.Bas_BonusData.Select(manager => manager.ManagerName).FirstOrDefault()) - 내부/외부 조인으로 변환되지 않으며 많은 DB 쿼리가 발생합니다. 열심히로드해도이 문제는 해결되지 않습니다! 변경하려면 SQL-View/StoredProcedure/LINQ-Join 문 사용을 고려해야합니다.

+0

감사합니다. 정보는 나를 위해 유용합니다. 그리고 SQL-View를 사용하여 목표를 달성 할 것입니다. – Drac

관련 문제