【问题标题】:Subsonic Query Construction for Contains(Guid)包含的亚音速查询构造(Guid)
【发布时间】:2010-01-15 16:46:53
【问题描述】:

我有一个“笔记”表。笔记支持一个级别的线程 - 换句话说,您可以回复笔记但不能回复另一个回复。所以表格看起来像下面这样:

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

与以前相同的错误消息。

【问题讨论】:

    标签: c# linq activerecord subsonic subsonic3


    【解决方案1】:

    看来,Subsonic 不支持 List.Contains。

    但是,IEnumerable.Contains 是受支持的,所以你可以试试这个:

    IEnumerable<string> noteListEnumerable = noteList;
    
    replies = from n in Note.All()
              where n.ParentNoteId != null && noteListEnumerable.Contains(n.ParentNoteId.Value)
              select n
    

    【讨论】:

      【解决方案2】:

      我认为如果您设置为字符串,它应该可以工作 - Contains 仅针对字符串值实现,但我知道我们确实有这个工作。

      【讨论】:

      • 尝试将所有转换为字符串(而不是 Guid) - 仍然是相同的错误消息。
      • Rob,请看一下我的回答 - 似乎 List 支持存在问题,而不是 Guids/strings。
      • 是的,我可以确认这一点,将列表投射回 IEnumrable 作品
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多