쿼리 구문에서 조인을 수행하는 방법에 대한 LINQ to SQL 예제의 많은 예제를 보았지만 메소드 구문으로 어떻게 수행하는지 궁금합니다. 예를 들어 다음을 수행하는 방법
var result = from sc in enumerableOfSomeClass
join soc in enumerableOfSomeOtherClass
on sc.Property1 equals soc.Property2
select new { SomeClass = sc, SomeOtherClass = soc }
와 함께 .Join()
? 누구든지 다른 간단한 예를 설명하거나 제공 할 수 있습니까?
답변
var result = from sc in enumerableOfSomeClass
join soc in enumerableOfSomeOtherClass
on sc.Property1 equals soc.Property2
select new { SomeClass = sc, SomeOtherClass = soc };
다음과 같습니다.
var result = enumerableOfSomeClass
.Join(enumerableOfSomeOtherClass,
sc => sc.Property1,
soc => soc.Property2,
(sc, soc) => new
{
SomeClass = sc,
SomeOtherClass = soc
});
보시다시피, 조인과 관련하여 쿼리 구문은 일반적으로 람다 구문보다 훨씬 더 읽기 쉽습니다.
답변
Justin은 조인 직후에 a가 나오는 경우 확장을 올바르게 표시했습니다 select
. 다른 식별자가 있으면 투명한 식별자 로 인해 까다로워집니다 . C # 컴파일러가 조인의 양쪽 절반 범위를 전파하는 데 사용하는 메커니즘입니다.
따라서 Justin의 예제를 약간 변경하려면 다음을 수행하십시오.
var result = from sc in enumerableOfSomeClass
join soc in enumerableOfSomeOtherClass
on sc.Property1 equals soc.Property2
where sc.X + sc.Y == 10
select new { SomeClass = sc, SomeOtherClass = soc }
다음과 같이 변환됩니다.
var result = enumerableOfSomeClass
.Join(enumerableOfSomeOtherClass,
sc => sc.Property1,
soc => soc.Property2,
(sc, soc) => new { sc, soc })
.Where(z => z.sc.X + z.sc.Y == 10)
.Select(z => new { SomeClass = z.sc, SomeOtherClass = z.soc });
다음 z
은 투명 식별자입니다. 투명하기 때문에 원래 쿼리에서 볼 수 없습니다. 🙂
답변
where 절을 사용하여 세 번째 다른 유형의 새 객체 (예 : Entity Framework 객체가 아닌 객체)를 만들려면 여기에 다른 답변을 추가하십시오.
public IEnumerable<ThirdNonEntityClass> demoMethod(IEnumerable<int> property1Values)
{
using(var entityFrameworkObjectContext = new EntityFrameworkObjectContext )
{
var result = entityFrameworkObjectContext.SomeClass
.Join(entityFrameworkObjectContext.SomeOtherClass,
sc => sc.property1,
soc => soc.property2,
(sc, soc) => new {sc, soc})
.Where(s => propertyValues.Any(pvals => pvals == es.sc.property1)
.Select(s => new ThirdNonEntityClass
{
dataValue1 = s.sc.dataValueA,
dataValue2 = s.soc.dataValueB
})
.ToList();
}
return result;
}
Where 및 Select 절에서 생성 된 중간 개체에 특히주의하십시오.
여기에서는 입력 목록에있는 속성 중 하나와 일치하는 property1을 갖는 결합 된 개체도 찾습니다.
나는 이것이 원래 질문자가 찾고 있던 것보다 조금 더 복잡하다는 것을 알고 있지만, 누군가에게 도움이되기를 바랍니다.