IQueryableでEntity Frameworkを選択すると "reduce nodeでなければならない"

c# entity-framework entity-framework-core navigation-properties

質問

述語がExpression<Func<Property, bool>>で、クエリ全体がIQueryable返すこのクエリがあります。

var query = _db.PropertyRepository.Get(predicate)
               .Include(x => x.Info)
               .ThenInclude(x => x.Address)
               .Include(x => x.TransactionListingAgents)
               .ThenInclude(x => x.Agent)
               .ThenInclude(x => x.Person)
               .ThenInclude(x => x.Contact)

私はそのデータでいくつかのデータ操作を行う必要があるため、そのIQueryableをDTOに投影するためにselectを実行したいと思います。だから私はこの他のクエリを持っている

query.Select(x => new BasePropertyDTO() {
    Id = x.Id,
    StreetNumber = x.Info.Address.StreetNumber,
    Street = x.Info.Address.StreetName,
});

ただし、例外をスローします。

還元可能ノードでなければならない

私の回避策は、 Select() ToList()前にToList()を実行していて、もう例外をスローしませんでしたが、今は必要のないデータを取得しています。

私は、 Include()呼び出しを持っていても、Infoナビゲーションプロパティまたはナビゲーションプロパティから選択プロパティをプロジェクトに投影しようとすると、問題が発生することがわかりました。

これがなぜこのように振る舞っているのか、私の質問に間違いがあるのか​​についてのアイデアはありますか?

1.1.0にアップグレードした後の完全なクエリ

query.ToList().Select(x => new BasePropertyDTO() {
                Id = x.Id,
                StreetNumber = (x.Info != null && x.Info.Address != null) ? x.Info.Address.StreetNumber : "",
                Street = (x.Info != null && x.Info.Address != null) ? x.Info.Address.StreetName : "",
                City = (x.Info != null && x.Info.Address != null) ? x.Info.Address.City : "",
                AgentName = x.TransactionListingAgents.Where(t => t.Agent != null && t.Agent.Person != null && t.Agent.Person.Contact != null && t.ListingId == x.Id && t.BrokerageId == x.BrokerageId).Select(a => a.Agent.Person.Contact.FullName).FirstOrDefault()
            });

AgentName部分がスローする

同じキーを持つアイテムが既に追加されています

私がそれを取り除くと、私はまだ

還元可能ノードでなければならない

人気のある回答

EFチームはEntity Framework Core 1.1でこの問題を修正しました。あなたは上記の問題を避けるためにそのバージョンを使用する必要があります。

エンティティフレームワークコア1.1

上記のバージョンで解決されたGitの問題

結合を介して集約するときに '還元可能ノードでなければならない'



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ