代码之家  ›  专栏  ›  技术社区  ›  David Veeneman

是否重新编写EF4查询以避免分析错误?

  •  1
  • David Veeneman  · 技术社区  · 14 年前

    如何重新编写实体数据模型查询以解决解析错误?以下是查询:

        var selectedNotes = notes
            .Where(n => n.Tags.Count == 0)
    

    下面是抛出的异常:

    There was an error parsing the query. [ Token line number = 12,Token line offset = 53,Token in error = AS ]
    

    以下是我问题的背景:

    我正在开发一个使用实体框架4的应用程序。该应用程序组织称为Notes的富文本文档,这些文档可以通过标签(如博客条目)进行搜索。我的一个实体数据模型查询只检索没有标记的注释:

    searchResults = DataStore.ObjectContext.Notes.WhereContainsNoTags();
    

    WhereContainsNoTags() 是作为LINQ扩展方法编写的,它包含查询的lambda表达式:

    public static IQueryable<Note> WhereContainsNoTags(this IQueryable<Note> notes)
    {
        IQueryable<Note> results;
    
        // Select Notes that contain no search Tags
        var selectedNotes = notes
            .Where(n => n.Tags.Count == 0)
            .OrderBy(n => n.Title);
        results = selectedNotes;
    
        // Set return value
        return results;
    }
    

    为了简单起见,我省略了包装lambda表达式的try catch块和记录任何错误的日志代码。

    这里有一个奇怪的部分:查询在我的开发机器上运行良好,但它在测试机器上抛出了上述异常。我还有几个在开发和测试机器上都运行良好的查询(匹配所有标记、匹配任何标记等等)。

    我对异常是否与EDM查询生成的SQL有关感到疑惑。是这样吗?最好的解决方法是什么?有没有一种方法可以重新构造lambda表达式以避免出现问题?

    谢谢你的帮助。

    1 回复  |  直到 14 年前
        1
  •  4
  •   Yakimych    14 年前
    var selectedNotes = notes.Where(n => !n.Tags.Any())