2009-10-07 2 views

답변

1

하나의 옵션은 쿼리 전용 인 경우 결과를 통합하는 서버에서 뷰를 만드는 것입니다.

2

UNION 및 CONCAT 연산자는 여러 테이블에서 여러 테이블로 쉽게 사용할 수 있습니다. UNION 및 CONCAT 연산자에 대한 링크는 다음과 같습니다. http://blog.benhall.me.uk/2007/08/linq-to-sql-difference-between-concat.html

약간의 차이점이있는 경우 동일한 필드를 노출하는 랩퍼 개체를 만들어서 숨길 수 있습니다 (불일치의 이름은 바꿉니다).

두 개의 불일치 테이블을 사용하여 LINQPAD 예제를 작성했습니다. 그것은 (예상대로 나는 초에 추가 가짜 행 병합) 괜찮 았는데 :

var set1 = from t in TestTriggers 
select new {t.TestTriggerID} ; 

var set2 = from t in TestTrigger2s 
select new {t.TestTriggerID} ; 

set1.Dump(); 
set2.Dump(); 

set1.Union(set2).Dump(); 
set1.Concat(set2).Dump(); 

두 테이블의 다른 열을했다,하지만 익명의 유형은 숨 깁니다. 결과 :

IOrderedQueryable<> (1 item) 
TestTriggerID 
1 


IOrderedQueryable<> (2 items) 
TestTriggerID 
1 

2 


IOrderedQueryable<> (2 items) 
TestTriggerID 
1 

2 


IOrderedQueryable<> (3 items) 
TestTriggerID 
1 

1 

2 

CONCAT은 UNION이 중복을 삭제하는 동안 두 테이블에서 1 행을 복제 한 것을 볼 수 있습니다.

1

수 Linq에 - 투 - SQL을 같은 클래스를 사용하여 테이블로 처리 갱신 시나리오의 당신의 더 붙어 그것을 사용하는 테이블을 알고 SQL에 LINQ 가능하지 않을 것 같은 들어

... 둘 다?

아니요 동일한 DBML 파일 (동일한 네임 스페이스)에 같은 이름의 클래스를 두 개 지정할 수 없습니다. 게다가 LINQ-to-SQL은 삽입하거나 업데이트 할 테이블을 어떻게 알 수 있습니까?

더 좋은 질문은 동일한 스키마가있는 두 개의 테이블을 하나의 컬렉션으로 함께 사용하려는 경우 왜 테이블을 단일 테이블로 병합하지 않는 것이 좋을까요?

+0

@DamienG 네, 테이블과 클래스 이름은 다를 수 있지만 어떻게 내 대답과 관련이 있습니까? –

0

독서의 경우 : 아무런 문제가되지 않습니다. 쿼리는 임의의 타입으로 투영 될 수 있고 LinqToSql은 프로퍼티 이름을 컬럼 결과와 일치시킵니다.

  • SQL 해당 SQL 스트링으로 불린다
  • DataContext.ExecuteQuery<Person>() 생산되고 documetation
      파라미터 : 다음 조작에 의해 열거 된 경우 해결

      from c in dc.Customer 
      where c.Address.StreetName.StartsWith("AB") 
      select new Person() {Name = c.Name}; 
      

      A (전술 한 것과 같이 질의 등)

    • sql이 데이터베이스로 보내지고 datareader가 반환됩니다.
    • 데이터 배열은 DataContext.Translate<Person>()docmentation으로 전달됩니다. 이 쿼리의 경우

- 만 Customer.Name 열 페치 및 고객의 인스턴스는 최대 new'd되지 않습니다. 또한 참고 - 당신은 datareader가 있다면 DataContext.Translate<T> 자신을 호출 할 수 있습니다.

단일 유형의 쿼리 가능한 테이블처럼 작동 속성을 추가 할 경우, 부분의 DataContext 파일에서이 작업을 수행 : 쓰기 위해

public IQueryable<CustomType> CustomTypeTable 
{ 
    get 
    { 
    var query = this.Type1Table.Select(t1 => new CustomType{f1 = t1.f1 ... }) 
     .Concat(this.Type2Table.Select(t2 => new CustomType{f1 => t2.f1 ... }) 
    return query 
    } 
} 

가 ...의 DataContext에 ObjectTracking하는 것입니다 유형 및 기본 키. 각 인스턴스의 유형은 데이터베이스의 테이블에 (모호하지 않게) 매핑해야합니다. 따라서 이러한 시나리오에서는 1 개의 유형 맵을 2 개의 테이블로 가질 수 없습니다.

2

다른 스키마에 동일한 이름을 가진 두 개의 테이블이있는 경우 테이블 특성에서 스키마 이름을 제거하고 다른 연결 문자열로 DataContext를 다시 만들어 필요한 동작을 얻을 수 있습니다.
동일한 스키마에서 이름이 같고 구조가 동일한 두 개의 테이블이있는 경우 이러한 테이블을 단일 클래스에 매핑하는 방법을 알지 못합니다.

관련 문제