Хобрук: Ваш путь к мастерству в программировании

Содержит все Linq to SQL

Возможный дубликат:
SQL-запрос LINQ 2 не работает с вызовом функции

У меня следующая проблема, мне нужен для Linq to SQL метод ContainsAll. Но мой код не работает... Вот код: Это мой метод ContainsAll:

public static bool Contains<T>(this IEnumerable<T> coll, IEnumerable<T> items) {
    bool res = true;
    foreach (var item in items) {
        res &= coll.Contains(item);
    }
    return res;
}

Это метод, в котором я вызываю запрос:

public List<User> GetAllUsers(int offset, int count, User currentUser) {
    log.Debug("get all users between " + offset + " and " + count);
    IEnumerable<Group> groups = currentUser.Groups;
    var data = from usr in ManagerUser
                where usr.Groups.Contains(groups)
                orderby usr.ID
                select usr;
    return data.Skip(offset).Take(count).ToList();
}

И это исключение, которое я получаю:

System.NotSupportedException wurde nicht von Benutzercode behandelt.
  HResult=-2146233067
  Message='LINQ to Entities' erkennt die Methode 'Boolean Contains[Group](System.Collections.Generic.IEnumerable`1[Knerdprod.Manager.DatabaseConnection.Group], System.Collections.Generic.IEnumerable`1[Knerdprod.Manager.DatabaseConnection.Group])' nicht, und diese Methode kann nicht in einen Speicherausdruck übersetzt werden.
  Source=System.Data.Entity
  StackTrace:
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.DefaultTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
       bei System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)
       bei System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
       bei System.Data.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input)
       bei System.Data.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input, DbExpressionBinding& binding)
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda)
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
       bei System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)
       bei System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda)
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
       bei System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)
       bei System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.UnarySequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
       bei System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)
       bei System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.UnarySequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call)
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.SequenceMethodTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, SequenceMethod sequenceMethod)
       bei System.Data.Objects.ELinq.ExpressionConverter.MethodCallTranslator.TypedTranslate(ExpressionConverter parent, MethodCallExpression linq)
       bei System.Data.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)
       bei System.Data.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
       bei System.Data.Objects.ELinq.ExpressionConverter.Convert()
       bei System.Data.Objects.ELinq.ELinqQueryState.GetExecutionPlan(Nullable`1 forMergeOption)
       bei System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption)
       bei System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator()
       bei System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator()
       bei System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator()
       bei System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
       bei System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
       bei Knerdprod.Manager.DatabaseConnection.DatabaseModelEntities.GetAllUsers(Int32 offset, Int32 count, User currentUser) in c:\Users\Kirk\Documents\Visual Studio 2012\Projects\Azure\Video und Statsmanager\DatabaseConnection\UserModelEntities.cs:Zeile 272.
       bei Knerdprod.Manager.WebServiceDatabaseMapper.Connectors.UserConnector.GetUserList(Int32 offset, Int32 count, User user) in c:\Users\Kirk\Documents\Visual Studio 2012\Projects\Azure\Video und Statsmanager\WebServiceDatabaseMapper\Connectors\UserConnector.cs:Zeile 57.
       bei UserRestService.UserManagementService.GetUserList(String accesstoken, Int32 offset, Int32 count) in c:\Users\Kirk\Documents\Visual Studio 2012\Projects\Azure\Video und Statsmanager\RestServices\User\UserManagementService.svc.cs:Zeile 119.
       bei UserRestService.UserManagementService.GetUserListJson(String accesstoken, Int32 offset, Int32 count) in c:\Users\Kirk\Documents\Visual Studio 2012\Projects\Azure\Video und Statsmanager\RestServices\User\UserManagementService.svc.cs:Zeile 206.
       bei SyncInvokeGetUserListJson(Object , Object[] , Object[] )
       bei System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
       bei System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
  InnerException:

У кого-нибудь есть идея?

Лг Кнерд

24.12.2012

  • Спасибо SWeko за редактирование кода :) 24.12.2012
  • Хороший вопрос, можно ли дать английскую трассировку стека в немецкой VS? 24.12.2012
  • В SequenceEqual есть ошибка, и вы указываете код метода Contains... 24.12.2012
  • Да, мне нужен метод, который дает метод containsall. Моя попытка с методом ContainsAll не удалась. Поэтому я попробовал SequenceEqual, который не работает с тем же исключением. 24.12.2012
  • Я немного отредактировал код. 24.12.2012

Новые материалы

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..