我正在开发一个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()
方法来避免这种情况,但这是非常早期的阶段,现在我只是想让事情发挥作用。
所以......既然我拥有来自MCS_DocumentFields
实体的给定Id的所有数据,我想分离数据,因为它在从视图渲染时在逻辑上是分开的。我的财产ContentType
可以是Header
,Drawing
,Body
,Footer
。所以我希望能够分离这些部分,因为我对每种内容类型都有部分视图。所以我这样做了:
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();
但现在我需要将它与MCS_DocumentFields
类型的一个数据结构相结合,这样我就可以将它传递给我的视图,然后从带有foreach语句的视图传递到我的部分视图来显示数据。
我不确定如何将这四个部分合二为一,保持不同部分之间的分离。
现在,Visual Studio显示四个var
变量的类型为IGrouping<Int32, MCS_DocumentFields>
答案 0 :(得分:3)
你可以像这样使用concat函数
var MCS_DocumentFields = headerItems.Concat(drawItem)
.Concat(bodyItems)
.Concat(footerItems)
.ToList();
答案 1 :(得分:2)
我会使用Union,但您可以通过添加“SelectMany(i =&gt; i)”来使用上面的Concat方法:
var MCS_DocumentFields = headerItems.SelectMany(i => i)
.Concat(drawItem)
.Concat(bodyItems.SelectMany(i => i))
.Concat(footerItems)
.ToList();
我强烈建议不要使用ToList()。请改用AsEnumerable()。每个.ToList()循环Collection,而使用AsEnumerable()只循环一次。