복붙노트

[SQL] 지역 시퀀스는이 포함 제외한 쿼리 연산자의 SQL 구현 () 연산자에 LINQ에서 사용할 수 없습니다

SQL

지역 시퀀스는이 포함 제외한 쿼리 연산자의 SQL 구현 () 연산자에 LINQ에서 사용할 수 없습니다

내 프로젝트에 LINQ를 사용하고 내 코드는 다음과 같습니다

var SE = from c in Shop.Sections
                    join c1 in obj.SectionObjects on c.SectionId equals c1.SectionId
                    select c;

 dataGridView1.DataSource = SE;

하지만 광고 dataGridView1.DataSource = SE이 오류에 직면; 오류 메시지는 다음과 같습니다

해결법

  1. ==============================

    1.당신은이 SQL 소스와 로컬 소스 사이에 가입 할 수 없습니다. 당신은 당신이 그들과 합류하기 전에 메모리에 SQL 데이터를 가지고해야합니다. 이 경우, 당신은 정말 당신이 첫 번째 컬렉션의 요소를 가지고 있기 때문에 조인을 수행하지 않는, 당신이 원하는 것은 ...를 선택 메소드를 포함하는 경우 ... 당신이 사용하여 얻을 수있는 쿼리 selectid이다.

    당신은이 SQL 소스와 로컬 소스 사이에 가입 할 수 없습니다. 당신은 당신이 그들과 합류하기 전에 메모리에 SQL 데이터를 가지고해야합니다. 이 경우, 당신은 정말 당신이 첫 번째 컬렉션의 요소를 가지고 있기 때문에 조인을 수행하지 않는, 당신이 원하는 것은 ...를 선택 메소드를 포함하는 경우 ... 당신이 사용하여 얻을 수있는 쿼리 selectid이다.

     var SE = Shop.Sections.Where( s => obj.SectionObjects
                                           .Select( so => so.SectionId )
                                           .Contains( s.SectionId ))
                           .ToList();
    

    로 변환

    select * from Sections where sectionId in (...)
    

    where 절에 대한 값은 로컬 객체의 컬렉션에있는 ID 목록에서 온다.

  2. ==============================

    2.당신은 SQL 소스에 로컬 소스에 참가할 수 없습니다 하지만 당신은 지역, v.v.에 SQL 소스에 가입 할 수 있습니다

    당신은 SQL 소스에 로컬 소스에 참가할 수 없습니다 하지만 당신은 지역, v.v.에 SQL 소스에 가입 할 수 있습니다

    var SE = from c1 in obj.SectionObjects
                  join c in Shop.Sections on c1.SectionId equals c.SectionId
                  select c;
    

    즉, 로컬 소스가 먼저 와야

  3. ==============================

    3.이 작업을해야 오히려 메모리보다 (IN을 사용하여) 데이터베이스 측에서 수행 할 수 :

    이 작업을해야 오히려 메모리보다 (IN을 사용하여) 데이터베이스 측에서 수행 할 수 :

    var SE = from c in Shop.Sections 
            where obj.SectionObjects.Select(z => z.SectionId).Contains(c.SectionId)
            select c; 
    

    L2S 프로파일 사물의 이러한 종류의 많은 도움이 될 것입니다 - 당신은 다른 SQL 내 솔루션 및 기타 솔루션에 의해 생성되는 비교할 수 있습니다.

  4. ==============================

    4.Shop.Sections.AsEnumerable에서 C에서 VAR SE = (). ToList ()                     obj.SectionObjects.AsEnumerable ()에서 C1 가입 할 수 있습니다. ToList ()를 c.SectionId가 c1.SectionId 같습니다에                     C를 선택;

    Shop.Sections.AsEnumerable에서 C에서 VAR SE = (). ToList ()                     obj.SectionObjects.AsEnumerable ()에서 C1 가입 할 수 있습니다. ToList ()를 c.SectionId가 c1.SectionId 같습니다에                     C를 선택;

    dataGridView1.DataSource은 SE를 =;

  5. from https://stackoverflow.com/questions/8164460/local-sequence-cannot-be-used-in-linq-to-sql-implementation-of-query-operators-e by cc-by-sa and MIT license