наиболее подходящее значение поля - PullRequest
0 голосов
/ 22 сентября 2010

У меня есть DataTable. Я также могу использовать Linq. В DataTable есть много столбцов и строк. Один из столбцов называется feedCode . его тип string. в database это длина 7 varchar, обнуляемая.

feedCode может содержать значения 9051245, 9051246, 9051247, 9031454, 9021447 .

Метод должен возвращать наиболее подходящее (в данном случае начиная с 905) значение 905 (первые 3 символа строки)?

спасибо.

Ответы [ 2 ]

1 голос
/ 22 сентября 2010

Попробуйте использовать этот код:

var feedCodes = new string[] { "9051245", "9051246", "9051247", "9051245", "9031454", "9021447" };

var mostOccuring = feedCodes.Where(feedCode => feedCode != null)
    .GroupBy(feedCode => feedCode.Length < 3 ? feedCode : feedCode.Substring(0, 3))
    .OrderByDescending(group => group.Count())
    .FirstOrDefault();

if(mostOccuring == null)
{
    //some exception handling
}
else
{
    //process mostoccuring.Key
}

этот код также обрабатывает коды подачи длиной менее 3 (даже пустые строки). Если вы не хотите их использовать, просто отфильтруйте их в выражении where.

1 голос
/ 22 сентября 2010

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

//The feedCodes (i put one in two times, to have one appearing most often)
var values = new string[] { "9051245", "9051246", "9051247", null, "", "9051245", "9031454", "9021447" };

//Just filter the list for filled up values
var query = values.Where(value => !String.IsNullOrEmpty(value))
                    //and group them by their starting text
                  .GroupBy(value => value.Substring(0, 3))
                    //order by the most occuring group first
                  .OrderByDescending(group => group.Count());

//Iterate over all groups or just take the first one with query.First() or query.FirstOrDefault()
foreach (var group in query)
{
    Console.WriteLine(group.Key + "  Count: " + group.Count());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...