안녕하세요.
어제 구구절절 질문/답변에 글 올렸다가 삭제후 내용정리 하여 다시 올립니다. ㅠㅠ
회사 업무프로그램을 독학으로 개발하려고 하니 어려움이 있어 도움을 청하고자 합니다.
원하는 데이터는 IsFinalOrder = true 인 데이터의 같은 QuoteNumber 값을 같는 데이터를 제거 하고자 합니다.
필터링(제외) 해야할 데이터를 Tolist()로 담았다가 다시 ToArray() 배열 string[] filter 변수에 담았습니다.
query 변수에 람다식의 Where문으로 filter 배열에 담긴 내용을 제거 하고자 합니다.
제가 얻고자 하는 데이터는 아래와 같습니다.
내연기관자동차부품 로봇자동화 KR22-002 1 1500000 False
내연기관자동차부품 로봇자동화 KR22-002 2 1400000 False
내연기관자동차부품 로봇자동화 KR22-002 3 1300000 False
내연기관자동차부품 로봇자동화 KR22-002 4 1250000 False
밧데리부품 로봇자동화 KR22-003 1 1000000 False
위와 같이 데이터를 뽑아야 하는데..잘 되지 않네요. 조언 부탁드립니다.
-------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LinqDemo2
{
internal class Program
{
private static void Main(string[] args)
{
var customer = new List<Customer>
{
new Customer{ID = 1, BusinessName = "JS전자", CEOName = "유재석"},
new Customer{ID = 2, BusinessName = "HD전자", CEOName = "강호동"},
new Customer{ID = 3, BusinessName = "SG전자", CEOName = "이수근"},
};
var quotationName = new List<QuotationName>
{
new QuotationName{ID = 1, QuoteName = "전기자동차부품 로봇자동화" ,QuoteNumber = "KR22-001", CustomerID = 1},
new QuotationName{ID = 2, QuoteName = "내연기관자동차부품 로봇자동화" ,QuoteNumber = "KR22-002", CustomerID = 2},
new QuotationName{ID = 3, QuoteName = "밧데리부품 로봇자동화" ,QuoteNumber = "KR22-003", CustomerID = 2},
new QuotationName{ID = 4, QuoteName = "밧데리부품 로봇자동화" ,QuoteNumber = "KR22-004", CustomerID = 3},
};
var quotationInformation = new List<QuotationInformation>
{
new QuotationInformation{ID = 1, QuoteGradation = 1, QuoteAmount = 1_200_000, IsFinalOrder = false, QuotationNameID = 1},
new QuotationInformation{ID = 2, QuoteGradation = 2, QuoteAmount = 1_000_000, IsFinalOrder = true, QuotationNameID = 1},
new QuotationInformation{ID = 3, QuoteGradation = 1, QuoteAmount = 1_500_000, IsFinalOrder = false, QuotationNameID = 2},
new QuotationInformation{ID = 4, QuoteGradation = 2, QuoteAmount = 1_400_000, IsFinalOrder = false, QuotationNameID = 2},
new QuotationInformation{ID = 5, QuoteGradation = 3, QuoteAmount = 1_300_000, IsFinalOrder = false, QuotationNameID = 2},
new QuotationInformation{ID = 6, QuoteGradation = 4, QuoteAmount = 1_250_000, IsFinalOrder = false, QuotationNameID = 2},
new QuotationInformation{ID = 7, QuoteGradation = 1, QuoteAmount = 1_000_000, IsFinalOrder = false, QuotationNameID = 3},
new QuotationInformation{ID = 8, QuoteGradation = 1, QuoteAmount = 900_000, IsFinalOrder = true, QuotationNameID = 4},
};
// IsFinalOrder 값이 True인 QuoteNumber ( 제외할 데이터 )
var filter = quotationInformation.Join(quotationName, i => i.QuotationNameID, n => n.ID, (i, n) => new { i, n })
.Where(x => x.i.IsFinalOrder == true)
.Distinct()
.Select(d => d.n.QuoteNumber)
.ToArray();
foreach (var data in filter)
{
Console.WriteLine($"{data}");
}
Console.WriteLine("---------------------------------------------");
// 데이터 조인
var query = quotationInformation.Join(quotationName, i => i.QuotationNameID, n => n.ID, (i, n) => new { i, n })
.Join(customer, n => n.n.CustomerID, c => c.ID, (nn, c) => new { nn, c })
//.Where(x => x.nn.n.QuoteNumber.Any(s => queryQuoteNumberTrue.Contains(s.ToString())))
//.Where(fi => fi.nn.n.QuoteNumber == queryQuoteNumberTrue.Contains(fi.ToString()))
//.Where(fi => fi.nn.n.QuoteNumber.Select(fi=>fi.)
//.Where(fi => !fi.nn.n.QuoteNumber.Any(f => fi.nn.n.QuoteNumber.Contains(filter[0])))
//.Where(fi=>fi.nn.n.QuoteNumber.Any()))
//.Where(fi=> filter.Except(y=>fi.nn.n.QuoteNumber.Contains(y)))
.Select(q => new QuotationOrderDTO
{
QuoteName = q.nn.n.QuoteName,
QuoteNumber = q.nn.n.QuoteNumber,
QuoteGradation = q.nn.i.QuoteGradation,
QuoteAmount = q.nn.i.QuoteAmount,
IsFinalOrder = q.nn.i.IsFinalOrder
})
.ToList();
foreach (var data in query)
{
Console.WriteLine($"{data.QuoteName} {data.QuoteNumber} {data.QuoteGradation} {data.QuoteAmount} {data.IsFinalOrder}");
}
Console.WriteLine("---------------------------------------------");
}
}
public class Customer
{
public int ID { get; set; }
public string BusinessName { get; set; }
public string CEOName { get; set; }
public List<QuotationName> QuotationNames { get; set; }
}
public class QuotationName
{
public int ID { get; set; }
public string QuoteName { get; set; }
public string QuoteNumber { get; set; }
public int CustomerID { get; set; }
public Customer Customer { get; set; }
public List<QuotationInformation> QuotationInformation { get; set; }
}
public class QuotationInformation
{
public int ID { get; set; }
public int QuoteGradation { get; set; }
public decimal QuoteAmount { get; set; }
public bool IsFinalOrder { get; set; }
public int QuotationNameID { get; set; }
public QuotationName QuotationName { get; set; }
}
public class QuotationOrderDTO
{
public string Customer { get; set; }
public string QuoteName { get; set; }
public string QuoteNumber { get; set; }
public int QuoteGradation { get; set; }
public decimal QuoteAmount { get; set; }
public bool IsFinalOrder { get; set; }
}
}
[최초 등록일: ]
[최종 수정일: 7/5/2022]