c#linq从另一个单列列表中将列添加到新列表

时间:2018-08-25 04:22:09

标签: c# entity-framework linq

我的项目是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 个答案:

答案 0 :(得分:0)

尝试:

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);
}

答案 1 :(得分:0)

您收到此编译器错误

  

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

因为变量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();