代码之家  ›  专栏  ›  技术社区  ›  hncl

c linq从另一个单列列表向新列表添加列

  •  -1
  • hncl  · 技术社区  · 6 年前

    我的项目是MVC5。我有一个同一天有多行的表,我需要得到每天这个条目的总数,我使用以下命令:

    var days = db.Nutrition.Where(x => x.Day >= fromDate 
               && x.Day <= toDate).DistinctBy(x => x.Day).AsEnumerable().ToList();
    List<double?> calories = new List<double?>();
    foreach (var item in days)
    {
        calories.Add(days.Where(c => c.Day==item.Day).Select(x => x.Calories).Sum());
    }
    

    我得到一份包含总数的清单。现在我需要做一个有两列的新列表。 我做了以下模型:

    public class Consumption
    { 
        public virtual double? Calories { get; set; }
        public virtual string Name { get; set; }
    }
    

    我试图使用以下命令生成新列表:

     List<Consumption> newList = new List<Consumption>();
     var name = new Consumption { Name = "name" };
     foreach (var item in calories)
     {
         newList.Add(name, Calories = (double)item.Value);
     }
    

    我得到以下错误:

    当前上下文中不存在“卡路里”名称

    编辑

    感谢斯蒂芬的评论: 我只是用一条线来达到同样的效果

    var results = db.Nutrition.Where(x => x.Day >= fromDate && x.Day <= toDate).GroupBy(l => l.Day)
             .Select(cl => new { Name = "name", Calories = cl.Sum(c => c.Calories)}).ToList();
    
    2 回复  |  直到 6 年前
        1
  •  0
  •   Benjamin RD    6 年前

    试用:

    List<Consumption> newList = new List<Consumption>();
    var name = new Consumption { Name = "name" };
    foreach (var item in calories)
    {
        var cal = new Consumption{ Name = "name", Calories = (double)item.Value });
        newList.Add(cal);
    }
    
        2
  •  0
  •   Brett Caswell    6 年前

    您收到此编译器错误

    当前上下文中不存在“卡路里”名称

    因为 List<Consumption>.Add(Comsumption item) 变量的方法 newList 只接受一个类型的参数 Consumption 是的。


    关于你的意图,以及你在评论中与@stephenmuecke的讨论,很明显你的意图是 Sum 财产 double Calories ,和 GroupBy 按属性 DateTime Day 然后 项目 变成一个 List<Consumption> 是的。

    var dateTimeFormat = "yyyy-dd-MM"; 
    var results = db.Nutrition.Where(x => x.Day >= fromDate && x.Day <= toDate)
        .GroupBy(x => x.Day)
        .Select(groupedX => new Consumption 
        { 
            Name = groupedX.Key.ToString(dateTimeFormat), 
            Calories = groupedX.Sum(y => y.Calories) 
        }).ToList();