получить наиболее распространенный элемент на основе значения столбца с обобщением C # - PullRequest
3 голосов
/ 10 мая 2011

У меня есть код ниже, который получает наиболее распространенные сроки погашения из PetsAgeDataTable.У меня есть этот код работает, но мне нужно сделать тот же трюк с другим столбцом.Поэтому мне нужно сделать его общим и передать лямбда-выражение, чтобы его можно было использовать повторно.Я просто трачу слишком много времени, пытаясь понять это, спрашивая, не будет ли кто-нибудь достаточно любезен, чтобы сообщить мне, как ... Приветствия / Ян Дженсен

1 Ответ

1 голос
/ 10 мая 2011

Если ваш метод использует лямбду:

Func<Pet, T> getData

Попробуйте что-то вроде:

public Tuple<T, int> GetMostCommonProperty<T>(IEnumerable<Pet> pets,
                                              Func<Pet, T> getData)
{
    var petGroups = from p in pets
                    let data = getData(p)
                    where data != null
                    group p by new { Data = data, p.PetId } into gp
                    select new { Data = gp.Key.Data, Count = gp.Count() };
    var element = petGroups.OrderByDescending(s => s.Count).First();

    return Tuple.Create(element.Data, element.Count);
}

Пример использования:

Tuple<string, int> mostCommonName = GetMostCommonProperty(PetsAgeDataTable,
                                                          pet => pet.Name);

Обратите внимание, что вам нужен общийтип возврата здесь (если это не всегда int).Вы не можете вернуть анонимный тип, но вам нужно что-то вернуть.Здесь я выбрал Tuple, но у вас есть много вариантов, в зависимости от того, как вы собираетесь его использовать.

...