ich die folgenden Klassen:EF7/Linq - "Enthält" Abfrage mit verschachtelten Objekt throws Exception
public class ActivityEntry
{
public int Id { get; set; }
public int CostCenterId { get; set; }
[ForeignKey("CostCenterId")]
public CostCenter CostCenter { get; set; }
}
public class CostCenter
{
public int Id {get;set;}
public int ActivityId { get; set; }
}
ich alle ActivityEntries
abfragen möchten, wo die CostCenter
bestimmte ActivityIds
hat.
Für den Filter habe ich eine Liste mit activityIds (filterList
). Die folgende Abfrage führt eine System.InvalidOperationException
"Die Sequenz mehr als ein Element enthält"
Und ich verstehe nicht, warum.
var filterList = new List<int> {1};
var data = _db.ActivityEntry
.Include(x => x.CostCenter)
.Where(x => filterList.Contains(x.CostCenter.ActivityId))
.ToList();
Eine weitere WHERE
Erklärung, die nicht das verschachtelte Objekt nicht verwendet CostCenter
fein arbeitet.
.Where(x =>filterList.Contains(x.CostCenterId))
Muss ich eine andere Syntax verwenden für die Aktivität-Ids in CostCenter
Objekt abzufragen?
Stapelüberwachung:
bei System.Linq.Enumerable.Single [TSource] (IEnumerable
1 source) bei Microsoft.Data.Entity.Query.EntityQueryModelVisitor.<>c__DisplayClass79_0
1.b__0 (IEnumerable1 ps, IQuerySource qs) bei Microsoft.Data.Entity.Query.EntityQueryModelVisitor.BindMemberExpressionCore[TResult](MemberExpression memberExpression, IQuerySource querySource, Func
3 memberBinder) bei Microsoft.Data.Entity.Query.EntityQueryModelVisitor.BindMemberExpression [ TResult] (Membermember, IQuerySource querySource, Func3 memberBinder) bei Microsoft.Data.Entity.Query.EntityQueryModelVisitor.BindMemberExpression(MemberExpression memberExpression, Action
2 memberBinder) bei Microsoft.Data.Entity.Query.ExpressionVisitors.Internal.RequiresMaterializationExpressionVisitor.VisitMember (Membermember) bei System.Linq.Expressions.MemberExpression.Accept (Expression Besucher) bei Microsoft.Data.Entity.Query.ExpressionVisitors.ExpressionVisitorBase.Visit (Expression expression) bei Remotion.Linq.Clauses.ResultOperators.ContainsResultOperator.TransformExpressions (Func2 transformation) bei Remotion.Linq.QueryModel.TransformExpressions(Func
2 Transformation) bei Microsoft.Data.Entity.Query.ExpressionVisitors. Internal.RequiresMaterializationExpressionVisitor.VisitSubQuery (SubQueryExpression subQueryExpression) bei Remotion.Linq.Clauses.Expressions.SubQueryExpression.Accept (Expression Besucher) bei Microsoft.Data.Entity.Query.ExpressionVisitors.ExpressionVisitorBase.Visit (Expression Ausdruck) bei Remotion.Linq .Clauses.WhereClause.TransformExpressions (Func2 transformation) bei Remotion.Linq.QueryModel.TransformExpressions(Func
2 Umwandlung) bei Microsoft.Data.Entity.Query.ExpressionVisitors.Internal.RequiresMaterializatio nExpressionVisitor.FindQuerySourcesRequiringMaterialization (QueryModel queryModel) bei Microsoft.Data.Entity.Query.QueryCompilationContext.FindQuerySourcesRequiringMaterialization (EntityQueryModelVisitor queryModelVisitor, QueryModel queryModel) bei Microsoft.Data.Entity.Query.EntityQueryModelVisitor.CreateQueryExecutor [TResult] (QueryModel queryModel) bei Microsoft .Data.Entity.Storage.Database.CompileQuery [TResult] (QueryModel queryModel) --- Ende der Stapelüberwachung vom vorherigen Ort --- bei Microsoft.Data.Entity.Query.Internal.QueryCompiler . <> c__DisplayClass18_01.<CompileQuery>b__0() bei Microsoft.Data.Entity.Query.Internal.CompiledQueryCache.GetOrAddQuery[TResult](Object cacheKey, Func
1 Compiler) bei Microsoft.Data.Entity.Query.Internal.QueryCompiler.CompileQuery [TResult] (Ausdruck Query) bei Microsoft.Data.Entity.Query.Internal.QueryCompiler.Execute [TResult] (Ausdruck Abfrage) bei Microsoft.Data.Entity.Query.Internal.EntityQueryProvider.Execute [TResult] (Ausdruck expression) bei Remotion.Linq.QueryableBase1.GetEnumerator() bei System.Collections.Generic.List
1..ctor (IEnumerable1 collection) bei System.Linq.Enumerable.ToList[TSource](IEnumerable
1 Quelle) bei zetvnext.application.Services.ReportService.GetCostCenterReportData (FilterDto Filter) in C: \ Source \ zetvnext \ src \ zetvnext.application \ Services \ ReportService.cs: Zeile 86. bei zetvnext.tests.ReportServiceTests.Test_Report_Data() in C: \ Source \ zetvnext \ Tests \ zetvnext.tests \ ReportServiceTests.cs: Zeile 142.
ActivityEntry scheint nicht ein Employee Eigenschaft zu enthalten. Ich bezweifle, dass das das Problem ist, aber ich frage mich, was du sonst noch nicht zeigst ... :-) –
Du bekommst im Allgemeinen keinen Fehler, wenn * die obige Abfrage konstruiert wird - wenn ein Fehler generiert werden soll, dann normalerweise passiert, wenn Sie * es ausführen, zB indem Sie 'ToList()' aufrufen. Die angegebene Ausnahme ist eine, die Sie wahrscheinlich von 'Single()' erhalten. Können Sie uns zeigen, wie die Ergebnisse materialisiert werden (d. H. Wie werden die Ergebnisse der Abfrage verwendet)? –
@Gary McGill Hinzugefügt den Mitarbeiter (ich versuche, nur die Teile zu integrieren, die notwendig sind, um die Frage zu verstehen, wenn ich hier auf SO poste ;-)) + ToList() hinzugefügt - verpasst, dass - die Ausnahme beim Ausführen ausgelöst wird. – Jetro223