Конструкция дозвукового запроса для содержания (Guid) - PullRequest
3 голосов
/ 15 января 2010

У меня есть таблица «Примечания». Заметки поддерживают один уровень потоков - другими словами, вы можете ответить на заметку, но не можете ответить на другой ответ. Таким образом, таблица выглядит примерно так:

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
    )

Поэтому я использую Subsonic active record, чтобы получить все «родительские» заметки:

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

Далее я просто перебираю IQueryable и заполняю общий список заметок. Guids:

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); 

То же сообщение об ошибке, что и раньше.

Ответы [ 2 ]

10 голосов
/ 18 января 2010

Кажется, List <>. Contains не поддерживается Subsonic.

Тем не менее, IEnumerable <>. Contains поддерживается, поэтому вы можете попробовать это:

IEnumerable<string> noteListEnumerable = noteList;

replies = from n in Note.All()
          where n.ParentNoteId != null && noteListEnumerable.Contains(n.ParentNoteId.Value)
          select n
1 голос
/ 15 января 2010

Я думаю, что если вы установите строку, она должна работать - Contains реализуется только для строковых значений, но я знаю, что у нас это работает.

...