문제

나는 3 개의 테이블이 있습니다. 2 고유 한 파일을 모두 얻기 위해 Union을 수행 해야하는 파일 목록이 포함되어 있으면 세 번째 테이블에 왼쪽 외부 조인을 수행하여 3 번째 테이블에있는 모든 파일을 찾아서 다른 파일 만 찾아야합니다. 2.

노조를하기 위해 다음은 다음과 같습니다.

var imageUnion = (from img in dc.ImageT1
                  select img.filename).Union(
                  from img in dc.ImageT2
                  select img.filename);

이제 세 번째 테이블에서만 파일을 가져 오려면 다음과 같은 왼쪽 외부 조인을 수행합니다.

var query = from image in dc.ImageT1
            join active in dc.ActiveImages on image.filename equals 
            active.filename into gj
            from subimage in gj.DefaultIfEmpty()
            where subimage.filename == null
            select new { image.filename, image.size };  

왼쪽 외부 결합을 한 테이블에 대해 간단히 수행하는 방법을 이해하지만 첫 번째 쿼리의 결과 세트를 왼쪽 외부 조인으로 얻는 방법은 무엇입니까? 기본적으로 imageSt1에 대해 왼쪽 외부 조인을 수행하는 대신 ImageUnion 결과에 반대하고 싶습니다.

감사!

도움이 되었습니까?

해결책

노조에서 하나 이상의 재산을 선택해야합니다. 현재 결과는 ienumerable입니다u003Cstring> (파일 이름이 문자열이라고 가정합니다).

var imageUnion = (from img in dc.ImageT1
                  select new { Filename = img.filename, Size = img.size }).Union(
                  from img in dc.ImageT2
                  select new { Filename = img.filename, Size = img.size });

그런 다음 두 번째 쿼리에서 사용하여 DC.Imaget1을 대체 할 수 있어야합니다.

더 많이 생각하지만 노조는 2 개의 익명 유형에서 작동하지 않을 수 있습니다. 이를 지원하기 위해 파일 이름과 크기 만있는 클래스를 정의 할 가치가 있습니까?

public class TempImage
{
    public string Filename { get; set; }
    public int Size { get; set; }
}

var imageUnion = (from img in dc.ImageT1
                  select new TempImage() { Filename = img.filename, Size = img.size }).Union(
                  from img in dc.ImageT2
                  select new TempImage() { Filename = img.filename, Size = img.size });

다른 팁

이미지 테이블 대신 첫 번째 쿼리에서 다시 선택할 수 있어야합니다. 같은 것 :

var query = from image in imageUnion
            join active in dc.ActiveImages on image.filename equals 
            active.filename into gj
            from subimage in gj.DefaultIfEmpty()
            where subimage.filename == null
            select new { image.filename, image.size };

편집 : 이미지 쿼리를 편집하여 크기와 파일 이름 (및 최종 쿼리에 필요한 다른 열)을 선택해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top