重新构建EF4查询以避免解析错误?

时间:2010-08-08 15:37:34

标签: entity-framework

如何重新构建实体数据模型查询以解决解析错误?这是查询:

    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 ]

以下是我的问题的背景:

我正在开发一个使用Entity Framework 4的应用程序。该应用程序组织了富文本文档,称为Notes,可以通过标签搜索,如博客条目。我的一个实体数据模型查询仅检索没有标记的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 个答案:

答案 0 :(得分:4)

var selectedNotes = notes.Where(n => !n.Tags.Any())