[ad_1]
こんにちは!
最近、.net 6 と新しい EF バージョンに移行しました。
コード内のツリー モデルが意図したとおりに動作しません。
私のデータには、いくつかの店舗、いくつかの都市、いくつかの国があります。
それらは次のように表示されるはずです。
HTML
---> Country 1 ---> City 1 --->Store 1 --->Store 2 --->Store 3 ---Etc.... ---> City 2 --->Store 1 --->Store 2 --->Store 3 ---Etc.... ---> Country 2 ---> City 1 --->Store 1 --->Store 2 --->Store 3 ---Etc.... ---> City 2 --->Store 1 --->Store 2 --->Store 3 ---Etc.... ---> Country 3 ---> City 1 --->Store 1 --->Store 2 --->Store 3 ---Etc.... ---> City 2 --->Store 1 --->Store 2 --->Store 3 ---Etc....
ただし、現在データは次のように表示されています。
HTML
---> Country 1 ---> City 1 --->Store 1 ---> Country 1 ---> City 1 --->Store 2 ---> Country 1 ---> City 2 --->Store 1 ---> Country 1 ---> City 2 --->Store 2 ---> Country 2 ---> City 1 --->Store 1 ---> Country 2 ---> City 1 --->Store 2
したがって、国をグループ化し、都市も国の下にグループ化するのではなく、ツリーの新しい個別のノードに各行を単独で表示します。
この問題はどうすれば解決できますか? おそらくEFが原因かと思いますが、試してみても解決しませんでした。
以下に使用されるコードを示します。
私が試したこと:
C#
var foundedTradeCenters = _tradeCenterService .FindTradeCenters(request.FilterByName, request.FilterByManager) .Include(tc => tc.City.Cluster.Region.Country) .ToList(); var tcGroup = foundedTradeCenters .GroupBy(g => g.City) .GroupBy(g => g.Key.Cluster.Region.Country) .OrderBy(g => g.Key.Name) .AsEnumerable(); var result = tcGroup .Select(s => new TreeModel() { Text = s.Key.Name, Type = TreeModel.NodeTypeName, Children = s.Select(c => new TreeModel() { Text = c.Key.Name, Type = TreeModel.NodeTypeName, Children = c.Select(t => new TreeModel() { Id = t.Id, Type = TreeModel.LeafTypeName, Text = t.Name }).OrderBy(n => n.Text) }).OrderBy(n => n.Text) }); return Json(result);
tcGroup 変数の結果は次の 2 つの画像にあります。 tcグループ画像[^]
その結果、新しい葉が生まれるたびに国が繰り返され、3 か国しかありませんが、表示する店舗は 1500 件になります。 最初に 3 か国だけを拡張するのではなく、これら 3 か国を 1500 回繰り返して拡張します。
解決策 1
完全なコードは提供できませんが、その方法については説明します…
エントリを繰り返し処理し、最初にルート ノード (およびルート ノードのみ) を作成し、すべてのエントリについてルート ノードがすでに存在するかどうかを確認する必要があります。
この後、もう一度繰り返して、エントリごとに、一致するルートノードを調べて、そこにエントリを作成する必要があります。ただし、ここでは、そのエントリがそのルートノードの下にすでに存在するかどうかも調べる必要があります。
お互いの子供レベルと同じです…
[ad_2]
コメント