C# でコーディングされた ASP.NET MVC アプリケーションがあります。アプリケーションは次のように構成されています。
コントローラ
リポジトリ
エンティティへの LINQ (エンティティ フレームワーク)
意見
Repository( _ProductRep
) を使用して LINQ to Entities にクエリを実行し、Controller に実際のエンティティ or を渡しList<T>
ますIQueriables<T>
。
疑問を抱く以上の状況について、助けていただきたいと思います。次のコードがあります。
List<Monthly_Report> lproduct_monthlyReport = _ProductRep.GetArchiveReport(product.Prod_ID, lmonth, lyear);
これlproduct_monthlyReport
を取得したら、foreach 内でクエリを実行し、特定のレコードを取得する必要があります。現在、次のようなソリューションを実装しました。
foreach (var item in litemList)
{
var lproductItem_monthlyReport = lproduct_monthlyReport.Single(m => m.Item_ID == item.Item_ID);
// Other code
}
litemList
製品が持つことができるすべてのアイテムのリストはどこにありますか.
このソリューションがカップリングを賢明に増加させる (そしてDemeter の法則にList<T>
違反する) のか、それとも ではなくa を実際にクエリしているので許容できるのかを知りたかったのIQueriable<T>
です。間違っている場合は訂正してください。ただし、List は EF DataContext にアクセスする必要がないため、Controller と EF の間に結合はないと思います。
私が間違っている場合、考えられる唯一の解決策は、クエリを Repository メソッドに置き換えることです (まだ実装する必要があります)。
var lproductItem_monthlyReport_ProductRep.GetArchiveReport(product.Prod_ID, lmonth, lyear, item.Item_ID);
ただし、このソリューションでは、リポジトリはループ サイクルごとに 4 つの条件で 1 つのクエリを作成しますが、以前のソリューションでは、リポジトリは 1 つの条件だけでクエリを作成していました。
この問題について教えてください。ありがとう。
PS: 両方の変数が必要でlproduct_monthlyReport
、lproductItem_monthlyReport
ループ内では 1 つだけを使用することはできません
PPS: コントローラーとリポジトリの間にビジネス サービス レイヤーを配置する必要があることはわかっています。これが次のステップです。