none
Linq 질문( join, SelectMany, Where) RRS feed

  • 질문

  • 위 그림과 같이 3개의 테이블이 존재하며 각테이블마다 PK FK 가 있습니다.

    제가 원하는 데이터는 5번째 테이블처럼 3번테이블 IsFinalOrder Value값이 True이면 QuotationNameID를 조인하지 않는 것입니다.

    하지만 제 코드는 4번테이블처럼 True값인 열만 제외가 되더군요...

    5번째 테이블처럼 Linq 로 데이터를 뽑을 방법을 여쭤봅니다.

    아래는 제 코드입니다.

    ------------------------------------------------------------------

                var query = context.QuotationNames.Join(context.Customers, n => n.CustomerID, c => c.ID, (n, c) => new { n, c })
                                                  .SelectMany(ci => ci.n.QuotationInformation
                                                  .Where(info => info.QuotationNameID == ci.n.ID && info.IsFinalOrder == false), (x, info) => new QuotationOrderDTO
                                                  {
                                                      Customer = x.c.BusinessName,
                                                      QuoteName = x.n.QuoteName,
                                                      QuoteNumber = x.n.QuoteNumber,
                                                      QuoteGradation = info.QuoteGradation,
                                                      QuoteAmount = info.QuoteAmount,
                                                      IsFinalOrder = info.IsFinalOrder
                                                  })
                                                  .ToList();


    권용완

    2022년 7월 4일 월요일 오전 4:18

모든 응답

  • 안녕하십니까, 와니 님
    포럼에 질문 주셔서 감사합니다.
    저희 쪽 테스트에 따르면 다음의 코드를 사용하여 원하는 데이터를 얻으실 수 있을 것입니다.

      var query1 = (from b in context.Buinesses
                            join q in context.Quotations on b.ID equals q.BuinessNameID
                            select new { b.BuinessName, q.QuotationName, q.QuotationNumber, q.ID } into list
                            join order in context.QuotationOrders on list.ID equals order.uotationNameID
                            where order.IsFinalOrder == false 
                            select new
                            {
                                list.BuinessName,
                                list.QuotationName,
                                list.QuotationNumber,
                                order.QuotationGradation,
                                order.Amount,
                                order.IsFinalOrder
    
                            }).ToList();
                var query2 = (from b in context.Buinesses
                             join q in context.Quotations on b.ID equals q.BuinessNameID
                             select new { b.BuinessName, q.QuotationName, q.QuotationNumber, q.ID } into list
                             join order in context.QuotationOrders on list.ID equals order.uotationNameID
                             where order.IsFinalOrder == true
                             select new
                             {
                                 list.BuinessName,
                                 list.QuotationName,
                                 list.QuotationNumber,
                                 order.QuotationGradation,
                                 order.Amount,
                                 order.IsFinalOrder
    
                             }).ToList();
    
                query1 = query1
        .Where(x => !query2.Any(y => y.QuotationName == x.QuotationName))
    .ToList();
    

    결과:

    답변이 도움이 되였으면 합니다, 문제 해결이 되지 않아서 정확한 답변을 원하는 경우에는 문제의 정보를 더 자세하게 답변으로 제공해 주시기 바랍니다.
    감사합니다.

    MSDN Community Support Elin

     다른 커뮤니티 멤버에게 도움이 될 수 있게 문제를 해결 한 답변을 '답변으로 표시'를 클릭하시고 그렇지 않은 경우 '답변으로 표시 취소'를 클릭하시기 바랍니다. MSDN 서포트에 대한 의견이나 불만이 있을 경우 MSDNFSF@microsoft.com 으로 연락하시기 바랍니다.

    2022년 7월 6일 수요일 오전 9:59
    중재자