如何分组列表并将结果映射到另一个列表

时间:2011-08-09 06:59:07

标签: c#

我有以下代码:

 public List<myTask> MyTask { get; set; }


 public class myTask
{
    public List<int> ID { get; set; }
    public List<DateTime> Date { get; set; }
    public Decimal Total { get; set; }
 }
 List<myTask> tempTask = new List<myTask>();
 MyTask = new List<myTask>();

我想做如下的事情,但有错误信息:

MyTask = tempTask.GroupBy(x => x.Date);
  

错误1无法隐式转换类型   'System.Collections.Generic.IEnumerable,MvcUI.Models.MyTask&GT;&GT;'   到'System.Collections.Generic.List'。一个明确的   存在转换(你错过了演员吗?)


编辑代码:

我试图添加代码:

var newtempTask = tempTask.GroupBy(x => x.Date, (Date, values) =>


 new
                    {
                        ID = values.Select(x => x.ID).ToList(),
                        Date = values.Select(x => x.Date).ToList(), Total=values.Select(x => x.Date).ToList() 
                                                                          }); and then 
        foreach (var newitem in newtempTask)
        {
            MyTask.Add(new MyTask
                           {
                               ID = newitem.ID,
                               Date= newitem.Date,Total = newitem.Total
                           });}
  

我尝试添加代码,请参阅上面编辑的代码。我有错误消息,错误7无法隐式转换类型'System.Collections.Generic.List&gt;'到'System.Collections.Generic.List'

2 个答案:

答案 0 :(得分:1)

如果您GroupBy,则不再有List<myTask>类型。 当你按列表分组时(这是打算?),你必须将MyTask的声明更改为:

public IEnumerable<IGrouping<List<DateTime>, myTask>> MyTask { get; set; }

答案 1 :(得分:1)

你没有解释你想要实现的目标...... 我认为以下可能是你要求的: (它按日期选择每个组中的第一个任务)

 List<myTask> tempTask = new List<myTask>();
 // fill tempTask
 List<myTask> Task = (from t in tempTask
                      group t by t.Date into g
                      select g.First()).ToList();

或者您是否希望每个日期的新任务都包含该组中所有任务的ID以及总计的总和?

在这种情况下,查询有点复杂:

   List<myTask> Task2 = (from t in tempTask 
                         group t by t.Date into g
                         select
                           new myTask
                             {
                              ID = new List<int>(g.SelectMany(t => t.ID)),
                              Date = g.Key,
                              Total = g.Sum(t => t.Total)
                             }).ToList();