Переформулировать запрос EF4, чтобы избежать ошибки синтаксического анализа? - PullRequest
1 голос
/ 08 августа 2010

Как можно переформулировать запрос модели данных сущностей, чтобы обойти ошибку синтаксического анализа? Вот запрос:

    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, которые можно искать по тегам, например записи в блоге. Один из моих запросов Entity Data Model извлекает только примечания, которые не имеют тегов:

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

WhereContainsNoTags() записывается как метод расширения LINQ и содержит лямбда-выражение для запроса:

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

Для простоты я опустил блок try-catch, который оборачивает лямбда-выражение, и код регистрации, который регистрирует любые ошибки.

Вот странная часть: запрос отлично работает на моей машине для разработки, но он выдает вышеупомянутое исключение на тестовой машине. У меня есть несколько других запросов (сопоставить все теги, сопоставить любые теги и т. Д.), Которые отлично работают как на компьютерах разработчиков, так и на тестовых компьютерах.

Я утверждаю, что исключение относится к SQL, сгенерированному запросом EDM. Это тот случай? Какой лучший обходной путь? Есть ли способ переформулировать лямбда-выражение, чтобы избежать проблемы?

Спасибо за вашу помощь.

1 Ответ

4 голосов
/ 08 августа 2010
var selectedNotes = notes.Where(n => !n.Tags.Any())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...