質問: r.UserRoleId ) ) ) && ``` 「s.User.Roles.Any」セクションを削除してもうまく動作しますが、必要な結果は得られません。明らかに、ユーザーロールのデータとクロスチェックを取得するために別のクエリを実行することはできますが、手動でそれを手動で分離する前に、私は何か愚かなものを紛失していないことを確認したいと思います。私は私の脳が揚げられていることを理解しようと多くの時間を費やしました。 また、idとitemNameでフィルタリングを削除すると、クエリが正常に動作し、ユーザーに属するアイテムまたはユーザーが属するロールに正しく返されるように見えることにも注意してください。 以下はスタックトレースです(InnerExceptionはnullです)。 `at lambda_method(Closure , InternalEntityEntry ) at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.SimpleFullyNullableDependentKeyValueFactory `1.TryCreateFromCurrentValues(InternalEntityEntry entry, TKey& key) at Microsoft.EntityFrameworkCore.Query.Internal.WeakReferenceIdentityMap` 1.CreateIncludeKeyComparer(INavigation navigation, InternalEntityEntry entry) at Microsoft.EntityFrameworkCore.Query.Internal.QueryBuffer.IncludeCore(Object entity, INavigation navigation) at Microsoft.EntityFrameworkCore.Query.Internal.QueryBuffer.Include(QueryContext queryContext, Object entity, IReadOnlyList `1 navigationPath, IReadOnlyList` 1 relatedEntitiesLoaders, Int32 currentNavigationIndex, Boolean queryStateManager) at Microsoft.EntityFrameworkCore.Query.Internal.QueryBuffer.Include(QueryContext queryContext, Object entity, IReadOnlyList `1 navigationPath, IReadOnlyList` 1 relatedEntitiesLoaders, Boolean queryStateManager) at Microsoft.EntityFrameworkCore.Query.Internal.GroupJoinInclude.Include(Object entity) at Microsoft.EntityFrameworkCore.Query.Internal.GroupJoinInclude.Include(Object entity) at Microsoft.EntityFrameworkCore.Query.Internal.GroupJoinInclude.Include(Object entity) at Microsoft.EntityFrameworkCore.Query.QueryMethodProvider.<_GroupJoin>d__26 `4.MoveNext() at System.Linq.Enumerable.d__163` 3.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator `2.MoveNext() at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.<_TrackEntities>d__15` 2.MoveNext() at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor `1.EnumeratorExceptionInterceptor.MoveNext() at System.Collections.Generic.List` 1..ctor(IEnumerable `1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable` 1 source) at Web.ItemHandlers.GenericItemHandler`1.Get(DataContract dataContract, UserAccount user, ItemDbContext dbc) at Web.Controllers.ItemDataController.Get(String item)`
回答: 私の質問には本当にばかげたエラーがありました。 ``` s.ItemDataUserRoles.Any( r => r.ItemDataId == s.Id && s.User.Roles.Any( t => t.RoleId == r.UserRoleId ) ) ) && ``` 私は現在のアイテムのItemDataUserRolesにアクセスしていましたが、アイテムのItemDataUserRolesのリストを自分のアイテムに一致するものだけにフィルタリングしていました。明らかに、完全に冗長なチェック。しかしこれはそれを破るものではなかった。それを破っていたのは、私がやった次のことは、それらのItemDataUserRolesが、渡されたユーザーの代わりに元のItemData行のユーザーと一致することを確認することでした。これは間違った結果を出す奇妙なSQLクエリを作成していました。