包含的亚音速查询构造(Guid)

时间:2010-01-15 16:46:53

标签: c# linq activerecord subsonic subsonic3

我有一张“Notes”表。 Notes支持一级线程 - 换句话说,您可以回复一个注释,但无法回复另一个回复。因此该表看起来如下所示:

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活动记录来获取所有“父”笔记:

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 个答案:

答案 0 :(得分:10)

似乎,Subsonic不支持List&lt;&gt; .Contains。

但是,支持IEnumerable&lt;&gt; .Contains,所以你可以试试这个:

IEnumerable<string> noteListEnumerable = noteList;

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

答案 1 :(得分:1)

我认为如果你设置一个字符串它应该工作 - Contains只对字符串值实现,但我知道我们确实有这个工作。