Вы можете использовать GroupBy и Anonymous type для достижения этой цели.
var result = list.GroupBy(x=>x.day)
.Select(x=> new
{
day=x.Key,
detail = x.ToList().Select(c=>
new
{
product=c.product,
value=c.value
})
});
Первичный ключ
Идеально, Вы используете искусственный (суррогатный) ключ для своих строк, числовой целочисленный тип данных (INT) является лучшим, потому что эффективный пространством и быстрый.
Первичный ключ должен быть сделан из минимального количества полей все еще выполнить условия 1.-3. Для подавляющего большинства таблиц этот минимум: 1 поле.
Для таблиц отношения (или совершенно особые пограничные случаи), это может быть выше. Ссылка на таблицу с составным первичным ключом является громоздкой, таким образом, составной ключ не рекомендуется для таблицы, на которую нужно сослаться на своем собственном.
В таблицах отношения (m:n отношения) Вы делаете составной ключ из первичных ключей связанных таблиц, следовательно Ваш составной ключ автоматически выполняет все три условия сверху.
Вы могли сделать первичные ключи из данных, если Вы абсолютно уверены, что это будет уникально и никогда не будет изменяться. Так как это трудно гарантировать, я рекомендовал бы против него.
Всегда ints.
Вы будете ценить Вас, сделал так, когда время к перекрестной ссылке те элементы в других таблицах (использующий внешние ключи)
Независимо от того, что это, сделайте его не значимым (суррогатный ключ). Значимые первичные ключи смертельны.
Это - старая война между пуристами и прагматистами. Пуристы не принимают суррогатные первичные ключи и настаивают на том, чтобы использовать только естественные. Если Вы спросите меня, то я буду голосовать за инкремент (суррогатные ключи) в большинстве ситуаций.
Я сказал бы, что автоматическая генерация, нет никакой настоящей причины не к в моем уме. Если Ваша разработка некоторой хеш-таблицы, но несмотря на это, я не придерживался бы уникального первичного ключа, автоматически созданного базой данных. Его быстрое, простое и надежное. Уже не изобретайте велосипед если там.