LINQ로 변환하려고하는 SQL 쿼리가 있는데 쿼리를 열거 할 때 애매한 오류 메시지를 이해하는 데 문제가 있습니다. (의도 한대로 작동)LINQ로 조인 된 SQL을 변환하는 중 오류가 발생했습니다.
SQL 쿼리는 것입니다 : 내가 가진
var q = from a in _context.LoadTestSummary
where
a.TargetStack == env &&
a.TestGuid != null &&
a.StartTime != null &&
a.LoadTestRunId != null
join b in _context.LoadTestTestSummaryData on new
{
LoadTestRunId = Convert.ToInt32(a.LoadTestRunId)
} equals new
{
LoadTestRunId = b.LoadTestRunId
}
group new { a, b } by new
{
a.TestGuid
}
into g
select new
{
DateCreated = g.Min(p => p.a.StartTime),
NumScenarios = g.Count(),
TestGuid = g.Key.TestGuid
NumTests = // ???
};
두 가지 문제 :
1)
select a.TestGuid, MIN(a.StartTime) as StartTime, COUNT(b.TestCaseId) as NumTests, COUNT(DINSTINCT a.Id) as NumScenarios
from LoadTestSummary as a
join LoadTestTestSummaryData as b
on a.LoadTestRunid = b.LoadTestRunId
where
a.TargetStack = env and
a.TestGuid IS NOT NULL AND
a.StartTime IS NOT NULL AND
a.LoadTestRunId IS NOT NULL
group by a.TestGuid
나는 다음과 같은 얻을 LINQ로 변환 쿼리가 열거 될 때 런타임 오류가 발생하여 해독하는 데 문제가 있습니다. 쿼리 Linqpad 잘 작동하지만 내 프로그램에서 런타임 오류를 제공합니다. 나는 이것이 무엇을 일으키는 지 확신하지 못한다. 그냥이 쳐다 내 머리 상처 수 :
ArgumentException: Expression of type 'System.Func``2[Microsoft.Data.Entity.Query.EntityQueryModelVisitor+TransparentIdentifier``2[PerfPortal.Models.LoadTestSummary,PerfPortal.Models.LoadTestTestSummaryData],<>f__AnonymousType7``1[System.String]]' cannot be used for parameter of type 'System.Func``2[<>f__AnonymousType5``2[PerfPortal.Models.LoadTestSummary,PerfPortal.Models.LoadTestTestSummaryData],<>f__AnonymousType7``1[System.String]]' of method 'System.Collections.Generic.IEnumerable``1[System.Linq.IGrouping``2[<>f__AnonymousType7``1[System.String],<>f__AnonymousType5``2[PerfPortal.Models.LoadTestSummary,PerfPortal.Models.LoadTestTestSummaryData]]] _GroupBy[<>f__AnonymousType5``2,<>f__AnonymousType7``1,<>f__AnonymousType5``2](System.Collections.Generic.IEnumerable``1[<>f__AnonymousType5``2[PerfPortal.Models.LoadTestSummary,PerfPortal.Models.LoadTestTestSummaryData]], System.Func``2[<>f__AnonymousType5``2[PerfPortal.Models.LoadTestSummary,PerfPortal.Models.LoadTestTestSummaryData],<>f__AnonymousType7``1[System.String]], System.Func``2[<>f__AnonymousType5``2[PerfPortal.Models.LoadTestSummary,PerfPortal.Models.LoadTestTestSummaryData],<>f__AnonymousType5``2[PerfPortal.Models.LoadTestSummary,PerfPortal.Models.LoadTestTestSummaryData]])'
2)가 NumTests 필드에 COUNT (DISTINCT a.Id을)하는 방법을 아주 확실하지 않다. 이것은 LINQ에서 지원되지 않는 것처럼 보이지만 # 1이 해결되면 다른 사람들이이 질문을 한 것처럼 보입니다.
여기에 무슨 문제가 있다고 생각하십니까? 나는 그 오류가 내게 무엇을 말하고 있는지조차 정확하게 알지 못한다.
모든 도움을 주실 수 있습니다! 방금 표준 문자열을 사용할 수 있습니다, int
에 LoadTestRunId
을 변환 할 필요가 없습니다,
from a in LoadTestSummary
join b in LoadTestTestSummaryData
on a.LoadTestRunId equals b.LoadTestRunId
where
a.TargetStack == env &&
a.TestGuid != null &&
a.StartTime != null &&
a.LoadTestRunId != null
group new { a, b } by a.TestGuid into g
select new
{
TestGuid = g.Key,
DateCreated = g.Min(el => el.a.StartTime),
NumTests = g.Select(el => el.b.TestCaseId).Count(),
NumScenarios = g.Select(el => el.a.Id).Distinct().Count()
};
참고 : SQL 쿼리와 LINQ 코드를 바로 찾고
는
감사합니다. Gasper,하지만 같은 오류가 발생하는 것 같습니다. 내가 그것을 (NumTests 필드뿐만 아니라) 그것을 제거하면 쿼리가 잘 작동하기 때문에 그것이 조인과 관련이있다. 나는 당신의 질의가 Linqpad에서 잘 작동한다는 것을 분명히해야한다. 그래서 아마도 내 생성 된 모델에 문제가있을 것이다. 나는 재건을 시도 할 것이다. –
그건 이상합니다. 테이블의 클래스가 어떻게 보이는지에 대한 질문을 업데이트하려고 할 수도 있습니다. – Gasper
동의. 데이터베이스에서 모델을 다시 작성하려고 시도하고 질문을 업데이트합니다. –