Попробуйте это:
var q = from item in lstMyTable
group item by item.ItemDate.ToString("MM/dd/yyyy HH:mm") into ItemGroup
select new
{
Description = ItemGroup.First().Description,
Date = ItemGroup.OrderBy(x => x.ItemDate).First().ItemDate
};
вышеуказанных групп запросов LINQ по дате + час + минут, игнорируя секунд. Код OrderBy
, примененный к ItemGroup
, гарантирует, что мы получим дату mininum, как описано в OP.
С этим входом:
List<MyTable> lstMyTable = new List<MyTable>()
{
new MyTable() { Description = "TEST s", ItemDate = new DateTime(2014, 12, 4, 16, 27, 11) },
new MyTable() { Description = "TEST s", ItemDate = new DateTime(2014, 12, 4, 16, 27, 12) },
new MyTable() { Description = "TEST s", ItemDate = new DateTime(2014, 12, 4, 16, 27, 13) },
new MyTable() { Description = "TEST s", ItemDate = new DateTime(2014, 12, 4, 17, 21, 11) },
new MyTable() { Description = "TEST s", ItemDate = new DateTime(2014, 12, 4, 17, 21, 12) },
new MyTable() { Description = "TEST s", ItemDate = new DateTime(2014, 12, 4, 17, 21, 13) }
};
вы получите этот результат:
[0] = { Description = "TEST s", Date = {4/12/2014 4:27:11 pm} }
[1] = { Description = "TEST s", Date = {4/12/2014 5:21:11 pm} }
Если вы хотите также группа по описанию, то просто substitue оговорку group by
с СТГ, как это:
group item by new
{
a = item.ItemDate.ToString("MM/dd/yyyy HH:mm") ,
b = item.Description
} into ItemGroup
И наконец, путем преобразования поля Datetime
в Ticks
, вы можете играть с требуемым временным расстоянием между отдельными записями, например.
group item by new
{
a = item.ItemDate.Ticks.ToString().Substring(0, item.ItemDate.Ticks.ToString().Length - 10), // instead of .ToString("MM/dd/yyyy HH:mm") ,
b = item.Description
} into ItemGroup
Вы можете играть вокруг, изменяя количество цифр вычитаются из item.ItemDate.Ticks
, заменяя, например, 10 с 9 или 8 и т.д.
так что вы хотите использовать несколько групп бай от? http://stackoverflow.com/questions/5231845/c-sharp-linq-group-by-on-multiple-columns – Ric
@Ric Больше группы, Мин в терминах TSQL, но с отдельными строками, где даты выходят из ассортимент. Честно говоря, я не уверен, как назвать это в TSQL. –
Можете ли вы привести пример группировки строк, которые находятся «в течение нескольких секунд друг от друга». Пример, который у вас есть, в каждой группе одинаковый. – juharr