Группа По разъяснениям - PullRequest
0 голосов
/ 23 марта 2012
    var listOfDuplicates = gridDatatable.AsEnumerable().
        GroupBy(item => item.Field<int>(Fields.GLAccountKey.Name),item => item.Field<string>(Fields.GLAccountNumber.Name))
            .Where(grouping => grouping.Count() > 1).ToList();

, если я хочу добавить еще одну группировку в GroupBy () Как и выше, мне снова нужно item =>.Почему нельзя «повторно» использовать элемент, как в First ()?Кроме того, кажется, что, когда я использую вторую группу, элементы для каждой группы будут отображать ТОЛЬКО эти 2 поля по сравнению с использованием только одной группировки, когда я вижу в элементах все поля из таблицы.Просто хочу лучше понять GroupBy ().Спасибо!

Ответы [ 2 ]

0 голосов
/ 23 марта 2012
var myListOfDuplicates = gridDatatable.AsEnumerable()
.GroupBy(item => new{Field = item.Field<int>(Fields.GLAccountKey.Name), S = item.Field<string>(Fields.GLAccountNumber.Name)})
.Where(grouping => grouping.Count() > 1)
.Select(grouping => grouping.Select(a => a))
.ToList();

Необходимо добавить явное имя, чтобы избежать "проекция анонимного типа должна быть именем образца или выражением доступа к члену". Можете ли вы сделать это без явного имени?

0 голосов
/ 23 марта 2012

Я думаю, это то, что вы хотите:

var listOfDuplicates = gridDatatable.AsEnumerable()
    .GroupBy(a => new{
                      KeyName = a.Field<int>(Fields.GLAccountKey.Name)
                      , NumberName = a.Field<string>(Fields.GLAccountNumber.Name)
                     }
           )
    .Where(grouping => grouping.Count() > 1)
    .Select(grouping => grouping.Select(a => a))
    .ToList();

Вы можете сгруппировать столько полей, сколько хотите, используя anonymous type. А вызов Select для групп дает вам доступ к их элементам и всем их полям. Выше, просто возвращая a, запрос вернет все поля.

...