Member 14800672 Ответов: 1

Как в совокупности с запятой, используя группы по


У меня есть TableDE класс, IdFirst, IdSecond и Name

Что я уже пробовал:

<pre>                
var userEntityGroups = TableDE.GroupBy(x => new { x.IdFirst, x.IdSecond})
.OrderBy(g => g.Key.IdFirst).ThenBy(g => g.Key.IdSecond)
.Select(g => new
{
     IdFirst = g.Key.IdFirst,
     IdSecond= g.Key.IdSecond,
     TableDE= g.OrderBy(x => x.Name)
});

затем я возвращаю Ok(userEntityGroups) //ответ webApi


Теперь, когда я отлаживаю группы сущностей пользователей, у них есть 2 записи
[0] где это имеет IdFirst, IdSecond и TableDE
[1] также там, где это имеет IdFirst, IdSecond и TableDE

теперь в таблице [0] он имеет 2 записи [0] и [1], где IdFirst и IdSecond похожи, но поле имени для каждой из них отличается

Также в Таблице [1] он имеет 2 записи [0] и [1], где IdFirst и IdSecond похожи, но поле имени для каждой из них отличается

Я не хочу, чтобы вернуться userEntityGroups вернуть 4 записи я хочу его вернуть только 2 записи

прямо сейчас это то, что я получаю
IdFirst=1, IdSecond=1, Name=name11
IdFirst=1, IdSecond=1, Name=name12
IdFirst=2, IdSecond=2, Name=name21
IdFirst=2, IdSecond=2, Name=name22


Вот чего я хочу
IdFirst=1, IdSecond=1, Name=name11,name12
IdFirst=2, IdSecond=2, Name=name21,name22

Maciej Los

Каковы ваши входные данные?

1 Ответов

Рейтинг:
0

Maciej Los

Взгляните на приведенный ниже пример, который должен помочь в решении проблемы.

//LinqPad rules!
void Main()
{
	List<TableDE> data = new List<TableDE>()
	{
		new TableDE(){IdFirst=1, IdSecond=1, Name="name11"},
		new TableDE(){IdFirst=1, IdSecond=1, Name="name12"},
		new TableDE(){IdFirst=2, IdSecond=2, Name="name21"},
		new TableDE(){IdFirst=2, IdSecond=2, Name="name22"},
		new TableDE(){IdFirst=3, IdSecond=3, Name="name31"},
		new TableDE(){IdFirst=1, IdSecond=2, Name="name1221"}
	};

	var result = data
		.GroupBy(x=> new{ Id1 =  x.IdFirst,  Id2 = x.IdSecond})
		.Select(grp=> new
		{
			IdFirst = grp.Key.Id1,
			IdSecond = grp.Key.Id2,
			Names = string.Join(",", grp.OrderBy(y=>y.Name).Select(y=>y.Name)),
		})
		.OrderBy(x=>x.IdFirst)
		.ThenBy(x=>x.IdSecond)
		.ToList();
	result.Dump();

}

// Define other methods and classes here
public class TableDE
{
	public int IdFirst { get; set; }
	public int IdSecond { get; set; }
	public string Name { get; set; }
}


Результат:
IdFirst IdSecond Names
1       1        name11,name12 
1       2        name1221 
2       2        name21,name22 
3       3        name31


Member 14800672

what if there was two other records
IdFirst=3, IdSecond=3, Name=name31
IdFirst=1, IdSecond=2, Name=name1221

this should be there result:
IdFirst=1, IdSecond=1, Name=name11,name12
IdFirst=1, IdSecond=2, Name=name1221
IdFirst=2, IdSecond=2, Name=name21,name22
IdFirst=3, IdSecond=3, Name= name31

how i'm not going to string join these two? i just want to join related ones

Maciej Los

Просто добавьте их к моему примеру и узнайте, что произойдет...