LINQ:在联接数据上的GroupBy之后检索模型数据

时间:2016-01-21 13:13:09

标签: c# linq lambda group-by

在加入3个表/模型/实体后,我可以简单地从视图模型中检索数据。但是当我分配了一个GroupBy时,我无法以正常的方式获取数据。我需要从分组数据中获取数据。

var modelList =
          from model1 in db.Model1
          join model2 in db.Model2 on model1.id equals model2.model1_id
          join model3 in db.Model3 on model2.id equals model3.model2_id
          where ((model1.id== 2) && (model.menu_id== 3)) 
          orderby subMenu.SUBMENU_NAME
          select new USER_ACCISSIBLE_SUBMENUE_VIEWMODEL
                      {
                       MODEL_VIEW_MODEL1 = model1,
                       MODEL_VIEW_MODEL2 = model2,
                       MODEL_VIEW_MODEL3 = model3
                      };

        string myData= "";
        foreach (var item in modelList )
        {
         myData+= item.MODEL_VIEW_MODEL1.COLUMN1 + item.MODEL_VIEW_MODEL2.COLUMN2 + item.MODEL_VIEW_MODEL3.COLUMN3;
        }

直到现在这个工作很简单。    但在下面的行后,我得到了for-each循环的错误。我已经给出了我的要求的一般概括形式。我还通过将GroupBy与modelList LINQ放在一起而不是使用modelListGrouped变量进行测试。但同样的错误。使用GroupBy子句时,Item无法找到viewmodels。我需要从分组元素中检索数据。

var modelListGrouped = modelList .GroupBy(x => x.MODEL_VIEW_MODEL1.id);
foreach (var item in modelListGrouped )
        {
         myData+= item.MODEL_VIEW_MODEL1.COLUMN1 + item.MODEL_VIEW_MODEL2.COLUMN2 + item.MODEL_VIEW_MODEL3.COLUMN3;
        }

1 个答案:

答案 0 :(得分:0)

GroupBy返回IEnumerable<IGrouping<T>>。所以你的foreach应该是这样的:

var modelListGrouped = modelList .GroupBy(x => x.MODEL_VIEW_MODEL1.id);
foreach (var group in modelListGrouped )
{
    // group is now the IEnumerable<T> you had before
    // but also knows group.Key by which this was grouped
    foreach(var item in group)
        myData += item.MODEL_VIEW_MODEL1.COLUMN1 + item.MODEL_VIEW_MODEL2.COLUMN2 + item.MODEL_VIEW_MODEL3.COLUMN3;
}

GroupBy返回IGrouping的枚举。它们具有分组Key,并表示属于该组的项目的枚举。