.FromSqlRaw 의 결과가 동적입니다.
sn : result1 : result2 : result3 : result4 : result5 :
result1 결과가 몇개가 될지 모릅니다.
그래서 맵핑하는 클래스에 string sn과 List<int> result 를 만들었는데 맵핑이 잘안되네요.
int numberOfResults = 5; // 생성할 서브쿼리 개수
StringBuilder sqlBuilder = new StringBuilder();
for (int i = 1; i <= numberOfResults; i++)
{
sqlBuilder.AppendLine($"(SELECT Result FROM Inspects WHERE ProbeSNId = main.ProbeSNId AND InspectTypeId = {i} AND DataFlag = 1) AS {i},");
}
// 마지막 줄에는 쉼표를 제거
sqlBuilder.Remove(sqlBuilder.Length - 3, 1);
string sql = @"
SELECT CONCAT(pt.Code, pst.DateTime, LPAD(pst.PcNo, 3, '0'), LPAD(ps.ProbeSeqNo,5,'0')) AS ProbeSN,
{sqlBuilder}
FROM (SELECT DISTINCT ProbeSNId FROM Inspects) AS main
JOIN ProbeSNs ps ON main.ProbeSNId = ps.Id
JOIN ProbeSNTypes pst ON ps.ProbeSNTypeId = pst.Id
JOIN ProbeTypes pt ON ps.ProbeTypeId = pt.Id";
List<ProbeSNView> probeSNViews = db.ProbeSNViews
.FromSqlRaw(sql)
.AsEnumerable()
.Select(x => new ProbeSNView
{
ProbeSN = x.ProbeSN,
Result = GetDynamicResults(x).ToList(),
})
.ToList();
private static List<int> GetDynamicResults(dynamic x)
{
var results = new List<int>();
for (int i = 1; i <= 5; i++)
{
var result = x[i] as int?;
if (result.HasValue)
{
results.Add(result.Value);
}
}
return results;
}
//[NotMapped]
public class ProbeSNView
{
//[Key]
public required string ProbeSN { get; set; }
public IEnumerable<int>? Result { get; set; }
}
이렇게 해봤습니다.
어떻게 맵핑 하면 좋을까요?
https://github.com/jys923/ProcessAutomation.git
[최초 등록일: ]
[최종 수정일: 2/22/2024]