2010-01-15 2 views
3

"메모"테이블이 있습니다. Notes는 한 수준의 스레딩을 지원합니다. 즉, 메모에 회신 할 수는 있지만 다른 회신에 회신 할 수는 없습니다. 그래서 테이블이 같이 보입니다 다음아음속 쿼리 구성 포함 (Guid)

CREATE TABLE [dbo].[Notes] (
[NoteId] [uniqueidentifier] ROWGUIDCOL NOT NULL DEFAULT (newid()) 
    CONSTRAINT [PK__Notes] 
    PRIMARY KEY ([NoteId]), 
[ParentNoteId] UNIQUEIDENTIFIER NULL, 
[NoteText] NVARCHAR(MAX) NOT NULL, 
[NoteDate] DATETIME NOT NULL 
    ) 

을 그래서 모든 "부모"노트 얻을 음속 활동 기록을 사용하고 다음에 IQueryable을 통해

var allNotes = (from n in Note.All() 
         where n.ParentNoteId == null 
         orderby n.NoteDate descending 
         select n) 
         .Skip((pageIndex - 1) * pageSize).Take(pageSize); 

다음 그냥 루프와 일반 채우기 메모의 GUID의 목록 : 마지막으로

List<Guid> noteList = new List<Guid>(); 
foreach (var note in allNotes) 
{ 
    noteList.Add(note.NoteId); 
} 

, 나는 원래 쿼리에서 노트에 모든 응답을 얻기 위해 쿼리를 생성하는 것을 시도하고있다 :

replies = from n in Note.All() 
      where n.ParentNoteId != null && noteList.Contains(n.ParentNoteId.Value) 
      select n 

내가받는 오류는 다음과 같습니다. ''포함 '방법이 지원되지 않습니다.'어떤 아이디어입니까?

편집 :

List<String> noteList = new List<String>(); 
foreach (var note in allNotes) 
{ 
    noteList.Add(note.NoteId.ToString()); 
} 
replies = (from n in Note.All() 
      where n.ParentNoteId != null && 
      noteList.Contains(n.ParentNoteId.Value.ToString()) select n); 

같은 오류 메시지가 이전 : 나는 다음과 같은 문자열로 변환했습니다.

답변

10

것 같습니다, List <>. 아음속에 의해 지원되지 않습니다. 당신이 시도 할 수 있도록 IEnumerable을 < 그러나

는> .Contains이 지원됩니다

IEnumerable<string> noteListEnumerable = noteList; 

replies = from n in Note.All() 
      where n.ParentNoteId != null && noteListEnumerable.Contains(n.ParentNoteId.Value) 
      select n 
+0

IEnumerable이 효과가있다. 도와 주셔서 감사합니다. – sestocker

1

문자열로 설정하면 작동해야한다고 생각합니다. - 포함 된 문자열 값만 구현되지만이 작업을 수행한다는 것은 알고 있습니다.

+0

은 (대신의 GUID) 문자열로 모두 변환 시도 - 여전히 같은 오류 메시지가. – sestocker

+0

롭, 내 대답 좀 봐, 제발 - List <> 지원, Guids/문자열에 문제가있는 것 같습니다. – VladV

+0

그래, IEnumrable 작품으로 다시 캐스팅리스트를 확인할 수있다. – dmose