Sitefinity - LINQ to SQL Ограничения?

В настоящее время я создаю собственный виджет MVC для проекта Sitefinity (v9.2).

В качестве части этого виджета существует запрос к базе данных для получения коллекции динамического типа модуля (статей). Я пытаюсь получить типы статей, которые содержат все метки в моем списке руководств Labels.PublicLabels.

Мой текущий запрос:

var collection = dynamicModuleManager.GetDataItems(articleType)
    .Where(a => a.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live 
     && a.Visible == true 
     && Labels.PublicLabels.All(l => a.GetValue<IList<Guid>>("Public").Contains(l)));

Во время выполнения я получаю исключение, в котором говорится, что "сторона сервера не реализована" Может ли это быть ограничением OpenAccess?

Я пробовал широкий спектр комбинаций запросов LINQ to SQL, которые были успешными, и я пытаюсь понять проблему здесь.

Благодарим за любую идею!

ОБНОВЛЕНИЕ: я попробовал несколько вариантов одного и того же запроса, таких как:

   var collection = dynamicModuleManager.GetDataItems(articleType)
    .Where(a => a.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live 
     && a.Visible == true 
     && Labels.PublicLabels.Any(l => a.GetValue<IList<Guid>>("Public").Contains(l)));

Нет результата, я все еще получаю следующее сообщение об исключении:

Выполнение 'System.Linq.Enumerable: Any (IEnumerable1,Func2) на стороне сервера базы данных в настоящее время не реализовано.

Будем весьма благодарны за любые дальнейшие советы, так как сейчас я предполагаю, что это связано с ограничениями OpenAccess в отношении LINQ to SQL.

2 ответа

Решение

Удалось решить эту проблему. Определенно вплоть до ограничений Open Access LINQ to SQL. Что я сделал, так это добавил дополнительное условие where после фильтрации коллекции настолько, насколько мне было нужно. Вот полный запрос:

    var collection = dynamicModuleManager.GetDataItems(articleType).Where(a => a.Status == ContentLifecycleStatus.Live && a.Visible == true)
        .OrderByDescending(a => a.PublicationDate)
        .Distinct()
        .Where(a => new HashSet<Guid>(a.GetValue<IList<Guid>>("Public")).IsSupersetOf(Labels.PublicLabels));

Я сообщу об этом в Sitefinity, и если им удастся исправить ситуацию, я сообщу об этом.

Спасибо всем вам за вашу поддержку!

У меня была такая же проблема раньше, этот способ работал для меня

var listIds = Labels.PublicLabels;
var collection = dynamicModuleManager.GetDataItems(articleType)
   .Where(a => a.Status == ContentLifecycleStatus.Live && a.Visible == true)           
   .Where(a => a.GetValue<TrackedList<Guid>>("Public").Where(al => listIds.Contains(al)).Any());

Я не собирал это, дайте мне знать, если это не сработает для вас

Другие вопросы по тегам