2011-10-17 18 views
0

私は、ASP.Net MVC 3とEntity Framework 4を使用するクライアント用のシステムを開発しました。このシステムは、クライアントが自分の機器を記録して監視できる小さなアプリケーションです。つまり、PCなどの機器を追加することができます(Asset Number、Price、Warrenty Expiresなどを記録する)、カテゴリー(PCシステム、プリンター、スピーカーなど)に割り当て、また装置の場所(メインオフィス、店舗、第2ビル)を記録する。しかし、これはうまくいきますが、最近、クライアントはシステムに組み込まれるいくつかのレポートを要求しています。Entity FrameworkまたはEnterprise Libraryを使用してカスタムレポートを作成しますか?

レポートの中には、機器資産番号で検索し、それに関連するすべての追加情報を返すことが簡単なものがあります。しかし、必要なレポートが1つあります。これは、レポートの上部にあるすべての場所を一覧表示し、レポートの左側にあるすべてのカテゴリをグリッド/ルックアップテーブルのようにリストすることです。次に、2番目のビルのPCシステムの総数、店舗のスピーカーの総数など、各ロケーションの機器カテゴリの合計数が表示されます。

私は間違っているかもしれませんが、これは、Entity Frameworkが設計されたものではなく、計算を表示するデータセットではなく、オブジェクトを返すということではありません。したがって、私はこれを行うための最善の方法は何だろうと思いましたか?

私はおそらく結果のデータセットを返すためにMicrosoftエンタープライズライブラリとストアドプロシージャを使用することを考えていましたが、これは間違ったアプローチですか?

フィードバックは非常に高く評価され、私の要求が少し混乱している場合はお詫び申し上げます。

ありがとうございました。

答えて

1

お客様が表示したいものは、ピボットテーブルと呼ばれます。ここで答えを見てください:Pivot table in c# entity framework

しかし、あなたは次のエンティティ

public class Location { 
    public int LocationId { get; set; } // PK 
} 
public class Equipment { 
    public int EquipmentId { get; set; } // PK 
} 
public class EquipmentAtLocation { 
    public int LocationId { get; set; } // PK/FK 
    public int EquipmentId { get; set; } // PK/FK 
    public int Quantity { get; set; } 
} 

を持っている場合は、このテーブルを構築することはあなたメートルを反復処理よりも何もありません:nのテーブルEquipmentAtLocationと書き込みQuantity LocationIdとEquipmentIdで与えられる細胞内へ。そのテーブルにそのPKがない場合、そのテーブルのLocationIdとEquipmentIdによるグループ化を最初に行う必要があります。

var locations = ctx.Locations.Select((val, idx) => new { val.LocationId, idx }).ToDictionary(x => x.LocationId, y => y.idx); // get a map of location to index 
var equipments = ctx.Equipments.Select((val, idx) => new { val.EquipmentId, idx }).ToDictionary(x => x.EquipmentId, y => y.idx); // get a map of equipment to index 

int[,] pivot = new int[locations.Count, equipments.Count]; 
foreach (var entry in ctx.EquipmentAtLocations) { 
    pivot[locations[entry.LocationId], equipments[entry.EquipmentId]] += entry.Quantity; 
} 

データコントラクトシリアライザは、多次元配列をシリアル化することができる場合、私は知りませんが、そうでなければ、ジャグ配列を使用する必要があります。もちろん、それをオブジェクトにパックして、どのインデックスが何を意味しているかを知るためにヘッダ情報(値で順序付けされたキーを辞書に含む)を含める必要があります。

+0

グレートドン。ありがとう。 – tgriffiths

1

これをMVC 3とタグ付けしたので、カテゴリを選択するためのWebインターフェイスを探していて、結果が表示されますか?そうだとすれば、確かにEntity Frameworkを使うことができます。コントローラのメソッドにAjaxリクエストを使用して、そのデータを含むビューを返すだけです。

手順は不要 - エンティティフレームワークでこれをすべて実行できます。あなたの左側はエンティティAです。これをクリックすると、/ Category/Index/5に対してajaxリクエストが実行され、単純にそれらの結果がレンダリングされます。

+0

このアダムに感謝します。 – tgriffiths

関連する問題