몇 군데에서 사용되는 Linq 표현식이 있습니다. 그렇지 않으면 매우 큰 테이블을 열거하지 않고 검색 논리를 달성하는 논리적 인 방법이 없었기 때문에 표현 경로를 따라갔습니다. Linq All()/Any() 비어 있지 않음
private Expression<Func<Property, bool>> PropertyIsCompliant()
{
return (p) => p.CalculationSets.OfType<SingleDocumentCalculationSet>()
.GroupBy(cs => cs.SourceDocument)
.Select(g => g.OrderByDescending(d => d.DateTime).FirstOrDefault().CalculationResults)
.SelectMany(cr => cr)
.All(cr => cr.Outcome == CalculationOutcome.Success);
}
내 모델
같은 있습니다 :- 속성이
- 각 CalculationSet 또한 문서에 할당 많은 CalculationSets있다
- 각 CalculationSet은 CalculationResults을 가지고 있습니다
- 각 CalculationResult 결과가있다
가장 최근의 (즉 가장 최근의 별개의 결과) 문서로 그룹화 된 가장 최근의 계산 세트의 모든 결과가 성공했는지 알려주는 표현식을 작성하려고합니다.
SelectMany 절은 올바른 CalculationSets에서 모든 CalculationResults를 반환 할 수 있습니다. 컬렉션이 비어 있지 않고 모두 Outcome.Success 인 경우에만 true를 반환하는 방법을 알 수 없습니다.
나는 All 연산자가 빈 콜렉션에 대해 true를 자동으로 반환한다는 것을 알고 있습니다. 나는 그 길을 생각할 수 없다!
"true"로 평가하는 경우에만 true를 돌려줍니다. – usr
저는 SQL로 올바르게 변환되는 비슷한 솔루션을 사용했습니다 (아래). –