2009-08-17 3 views
0

나는 이것에 대해 어떻게 가야할지 모르겠다. 두 테이블의 열을 결합하여 외래 키를 다시 얻는 대신 외래 ID와 동일한 행에 이름을 표시 할 수 있습니다. 아음속 3 InnerJoin

은이 같은 짓을하지만 난 내 기본 키에 대한 오류지고 유지 :

은 SQLQuery 테스트 = db.Select.From() InnerJoin (filesTable.file_typeColumn, filetypesTable.filetype_idColumn) 어디에요 (filesTable를.. file_typeColumn) .IsEqualTo (filetypesTable.filetype_idColumn);

키를 고려해야 할 속성을 결정할 수 없습니다. 'ID'를 만들거나 SubSonicPrimaryKey 특성을 사용하여 속성을 표시 할 수 있습니다. 설명 : 현재 웹 요청을 실행하는 동안 처리되지 않은 예외가 발생했습니다. 오류 및 코드에서 시작된 위치에 대한 자세한 정보는 스택 추적을 검토하십시오.

예외 정보 : System.InvalidOperationException : 키를 고려해야 할 속성을 결정할 수 없습니다. - 'ID'를 만들거나 SubSonicPrimaryKey 특성으로 표시 할 수 있습니다. 제안 사항이 있습니까?

답변

0

다음은 당신이 원하는 걸 얻을해야합니다

SqlQuery test = db.Select() 
    .From<filesTable>() 
    .InnerJoin<filetypesTable>() 

또한 음속의의 LINQ 구현을 사용하여이 작업을 수행 할 수 있습니다 :

var fileIdsAndTypeds = from files in filesTable.All() 
    join types in filesTypes.All() 
    on types.filetype_idColumn equals files.filetypeColumn 
    select files; 
+0

바로 추가 할 수 없기 때문에 설정했는지 확신 할 수 없습니다 .Schema를 filesTable에 추가합니다. –

+0

또한 두 개의 인수를 취하는 메서드 Select에 대한 오버로드가 없다고 말합니다. 우리는 전에 SelectColumns로 시도했지만 그 어느 곳에서도 우리를 얻지 못했습니다. –

+0

죄송합니다. 소닉 2 스타일을 사용하고있었습니다. 업데이트 된 버전의 쿼리가 작동합니다. –

0

그냥 널을 반환 유지 어떤 이유.

나는이 일을 결국 :

DBDB db = new DBDB(); 
     SqlQuery Files = db.SelectColumns(filetypesTable.filetype_idColumn, filetypesTable.filetype_nameColumn, 
      filesTable.purpose_idColumn, filesTable.page_idColumn, filesTable.file_idColumn, filesTable.file_descriptionColumn, 
      filesTable.file_nameColumn, filesTable.file_pathColumn, filesTable.file_typeColumn, filesTable.file_dateColumn) 
       .From<file>() 
       .InnerJoin<filetype>(filesTable.file_typeColumn, filetypesTable.filetype_idColumn); 

List<file> fileList = Files.ExecuteTypedList<file>(); 

그 콜렉션의 내부에 다음과 첫 번째 테이블에 실제 열 목록을 반환하는 것 조인 된 테이블의 데이터와 또 다른 하나입니다 ... . 이제는 DataBind 및 사용자 정의 Gridview 열을 사용하여 작업하는 방법을 알아 내려고 ...

+0

기술적으로는 파일 형식이 아닌 두 가지 형식이므로 목록 유형에 문제가 있습니다. 이 문제를 해결할 수있는 유일한 방법은 다음과 같습니다. var fileList = Files.ExecuteReader(); 문제는 라이브 읽기이므로 페이징을 허용하지 않는다는 것입니다. –