c # linq добавить столбец в новый список из другого списка из одного столбца - PullRequest
0 голосов
/ 25 августа 2018

Мой проект 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 голосов
/ 25 августа 2018

Вы получили эту ошибку компилятора

Имя «Калории» не существует в текущем контексте

, поскольку метод 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();
0 голосов
/ 25 августа 2018

Попробуйте с:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...