#c# #.net
#c# #.net
Вопрос:
У меня есть следующая таблица.
Дата именования
A 04.10.2016
A 10/03/2016
A 05.10.2016
B 02.10.2016
B 01.10.2016
B 03.10.2016
B 03.10.2016
C 05.10.2016
C 02.10.2016 В 10.04.2016 В
Я хотел бы отобразить это
Имя Дата
B 10/01/2016
B 10/02/2016
B 10/03/2016
C 10/02/2016
C 10/04/2016
C 10/05/2016
A 10/03/2016
A 10/04/2016
A 10/05/2016
Как создать запрос, чтобы получить этот результат.
Комментарии:
1. какие-либо усилия с вашей стороны?
Ответ №1:
var elements = new[]
{
new { Name = "A", Date = DateTime.Parse("10/04/2016") },
new { Name = "A", Date = DateTime.Parse("10/03/2016") },
new { Name = "A", Date = DateTime.Parse("10/05/2016") },
new { Name = "B", Date = DateTime.Parse("10/02/2016") },
new { Name = "B", Date = DateTime.Parse("10/01/2016") },
new { Name = "B", Date = DateTime.Parse("10/03/2016") },
new { Name = "C", Date = DateTime.Parse("10/05/2016") },
new { Name = "C", Date = DateTime.Parse("10/02/2016") },
new { Name = "C", Date = DateTime.Parse("10/04/2016") },
};
// LINQ to Objects
elements
.GroupBy(e => e.Name) // grouping by name
.Select(group => group.OrderBy(e => e.Date)) // order elements by date
.OrderBy(group => group.First().Date) // order groups by date
.SelectMany(group => group); // compose groups
// LINQ to Entities
elements
.GroupBy(e => e.Name)
.Select(group => group.OrderBy(e => e.Date))
.OrderBy(group => group.FirstOrDefault().Date)
.AsEnumerable()
.SelectMany(group => group);
Комментарии:
1. Мой запрос — var group = db.Routearies .GroupBy (d => d.JobListID) . Выберите(g => g.OrderBy(d => d.DutyDate)) .OrderBy(e => e.First().DutyDate) . Выберите MANY(e => e) . ToList();
2. Но у меня ошибка «Метод ‘First’ может использоваться только в качестве окончательной операции запроса. Рассмотрите возможность использования метода ‘FirstOrDefault’ в этом случае вместо этого.» Я заменяю First() на FirstOrDefault(). Он отображается некорректно
3. @NayLinHtike добавил возможное решение для LINQ для сущностей.
Ответ №2:
Вероятно, вам не нужен groupby, но только orderby может полностью выполнить вашу задачу:
yourList.OrderBy(l => l.Date).ThenBy(l => l.Name)
Ответ №3:
Было бы здорово, если бы вы предоставили больше информации. Например, тип объекта, содержащий данные. Это пользовательская модель или DataTable? В любом случае, я попробую и то, и другое.
var result = dataTable.Rows.AsEnumerable().GroupBy(x => x.Name).OrderBy(x => x.Date);
или
var result = Foo.GroupBy(x => x.Name).OrderBy(x => x.Date);
Комментарии:
1. мой запрос выглядит как «db.table. AsEnumerable().GroupBy(x=>x.Name ). Порядок (x=x.Дата);
2. Тогда все должно быть в порядке. Хотя я заметил, что в OrderBy у вас есть опечатка. Вы пропали без вести > до x.Дата. Он должен гласить x => x.Date
Ответ №4:
https://dotnetfiddle.net/0SfhAz
Это проблема с кодом. По какой-то причине я не могу заставить скрипку выписывать значения из списка.
Первоначально я сделал это в LINQPad, и вот результат, который я получил из кода в скрипке, когда в LINQPad
- B 10/1/2016
- B 10/2/2016
- B 3.10.2016
- C 10/2/2016
- C 10/4/2016
- C 10/5/2016
- A 3.10.2016
- A 10/4/2016
- A 5/10/2016
Я не знаю, почему я не могу просто выполнить строку записи на скрипте .net, но это сложно. В случае, если скрипка не работает для вас, вот запрос linq, который я использовал для этого
var Упорядоченный список = originalList.OrderBy(x => x.someDate).GroupBy(y => y.Name );
Могут быть подходы получше, но это, похоже, решит вашу проблему