2010-09-22 2 views
0

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

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

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

спасибо.

+0

Не могли бы вы рассказать о своем вопросе. Особенно я не могу понять. Вы имеете в виду подгонку? Если это так, вы имеете в виду строки, начинающиеся с 905? или ближайшего номера до 905? Или ... – flq

+0

@flq, спасибо, я изменил текст вопроса. – loviji

ответ

1

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

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 
} 

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

1

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

//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()); 
} 
+0

Я полагаю, что loviji спрашивает самую захватывающую группу из первых трех персонажей, а не самый распространенный фид-код партичной группы. –

Смежные вопросы