0

可能重复:
LINQ 2 SQL 查询不适用于函数调用

我有以下问题,我需要 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:

有人有想法吗?

克纳德

4

0 回答 0