我的项目是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();
答案 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();