1

私はasp.net mvc 3アプリケーションに取り組んでいます。データベースからデータを取得するためにLINQを使用しています:

 public object GetFieldsForDocument()
        {
            DocumentFieldsRepository.Context = FieldsRepository.Context;

            var model = DocumentFieldsRepository.All()
                    .Join(FieldsRepository.All(),
                        df => df.FieldId,
                        f => f.Id,
                        (df, f) => df).ToList();
            return model;
        }

そして、私のコントローラーにはこれがあります:

List<MCS_DocumentFields> model = (List<MCS_DocumentFields>)DocumentFieldsService.GetFieldsForDocument();
            model = model.Where(x => x.DocumentId == 10005)
                .OrderBy(x => x.ContentTypeId)
                .ThenBy(x => x.RowNo)
                .ThenBy(x => x.ColumnNo)
                .ToList();

IDをメソッドに渡すことでこれを回避できることはわかっていますが、これはGetFieldsForDocument()非常に初期の段階であり、今のところ機能させたいだけです。

だから...特定のIDのエンティティからのすべてのデータを取得したMCS_DocumentFieldsので、ビューからレンダリングされるときに論理的に分離されるため、データを分離したいと思います。私は、、、、のプロパティを持ってContentTypeいます。コンテンツ タイプごとに部分的なビューがあるため、これらの部分を分離できるようにしたいと考えています。だから私はこれを作ります:HeaderDrawingBodyFooter

var headerItems = model.Where(c => c.ContentTypeId == 1).GroupBy(c => c.RowNo).ToList();
            var drawItem = model.Where(d => d.ContentTypeId == 2).ToList();
            var bodyItems = model.Where(b => b.ContentTypeId == 3).GroupBy(b => b.RowNo).ToList();
            var footerItems = model.Where(f => f.ContentTypeId == 4).ToList();

しかし、これを 1 つのタイプのデータ構造に結合しMCS_DocumentFieldsて、ビューに渡し、ビューから foreach ステートメントを使用して、部分ビューを使用してデータを表示できるようにする必要があります。

これらの 4 つのパーツを 1 つに組み合わせて、異なるパーツ間の分離を維持する方法が正確にわかりません。

Visual Studio は、4 つのvar変数がIGrouping<Int32, MCS_DocumentFields>

4

2 に答える 2

2

代わりに Union を使用しますが、「SelectMany(i=>i)」を追加することで上記の Concat アプローチを使用できます。

var MCS_DocumentFields = headerItems.SelectMany(i => i)
                            .Concat(drawItem)
                            .Concat(bodyItems.SelectMany(i => i))
                            .Concat(footerItems)
                            .ToList();

また、ToList() を使用しないことを強くお勧めします。代わりに AsEnumerable() を使用してください。各 .ToList() は Collection をループし、AsEnumerable() では 1 回だけループします。

于 2013-05-08T11:53:28.863 に答える