Это потому, что класс модели имеет другой набор полей, чем DTO
, и ваш картограф отображает оба пути. Но это вполне естественно, у dto нет идентификатора.
Обходной путь должен состоять в том, чтобы исключить эти поля из сопоставления, например, путем аннотирования id
и других полей в классе модели, которые не связаны с: Mapping("this")
.
var groupedCustomerList = userList
.GroupBy(u => u.GroupID)
.Select(grp => grp.ToList())
.ToList();
Все еще старый, но ответ от Lee не дал мне группу. Ключ как результат. Поэтому я использую следующее утверждение, чтобы сгруппировать список и возвратить сгруппированный список:
public IOrderedEnumerable<IGrouping<string, User>> groupedCustomerList;
groupedCustomerList =
from User in userList
group User by User.GroupID into newGroup
orderby newGroup.Key
select newGroup;
Каждая группа теперь имеет ключ, но также и содержит IGrouping, который является набором, который позволяет Вам выполнять итерации по членам группы.
Оператор группы будет группировать по идентификатору группы. Например, если вы затем напишете:
foreach (var group in groupedCustomerList)
{
Console.WriteLine("Group {0}", group.Key);
foreach (var user in group)
{
Console.WriteLine(" {0}", user.UserName);
}
}
, все должно работать нормально. Каждая группа имеет ключ, но также содержит IGrouping
, который представляет собой коллекцию, которая позволяет выполнять итерацию по членам группы. Как упоминает Ли, вы можете преобразовать каждую группу в список, если действительно хотите, но если вы просто собираетесь перебирать их в соответствии с приведенным выше кодом, от этого нет никакой реальной пользы.