У меня есть объект, который выглядит следующим образом:GroupBy несколько столбцов в Linq с Take()
public class Entries
{
public Contract Contract { get; set; }
public int Year { get; set; }
}
public class Contract
{
public int Id { get; set; }
public string Name { get; set; }
}
Я хочу, чтобы иметь возможность обращаться к базе данных и возвращает объект, который позволил бы мне сообщить о договоре данные, как это, где числа для каждого года на счету за этот год:
Contract ID/Name 2015 2016
1 - ABC 12 4
2 - XYZ 17 76
3 - QRS 414 0
Я начал с Linq, как это:
var results = context.Entries
.Include(x => x.Contract)
.GroupBy(x => new { x.Contract, x.Year })
.Select(x => new { Contract = x.Key.Contract, Year = x.Key.Year, Count = x.Count() })
.OrderBy(x => x.Contract.Number)
.Take(5).ToList();
Мне хотелось бы, чтобы этот единственный IQueryable настроил меня, чтобы подтолкнуть данные к объекту, который имитирует приведенную выше таблицу. У меня возникли проблемы с настройкой, из-за Take()
. Я хочу показать только первые 5 результатов, но когда я применяю его, как я сделал выше, после группировки, используя приведенные данные примера, будет одна запись для ABC 2015 и одна запись для ABC 2016. Я не уверен лучший способ использовать GroupBy()
и Take()
вместе для достижения моей цели.
Вы хотите, чтобы верхние 5 были основаны на чем? Что, если какой-то контракт имеет большую ценность в 2015 году, но 0 в 2016 году? – MarcinJuraszek
@MarcinJuraszek Я хочу 5 результатов контрактов макс. – im1dermike