tags:

views:

46

answers:

2

Hello, I have a DataTable. I can also use Linq. In a DataTable have many columns, and rows. One of the column is called as feedCode. its type is string. in database it's length is 7 varchar, nullable.

feedCode may contain values as 9051245, 9051246, 9051247, 9031454, 9021447.

Method must return most matched (in this case starting with 905) value 905 (first 3 character of string)?

thanks.

+1  A: 

Maybe i didn't understand your question correctly but maybe this will be a starting point for your:

//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());
}
Oliver
I suppose loviji asks the most occuring group of the first three characters, not the most occuring feedcode of partical group.
MAKKAM
+1  A: 

Try to use this code:

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
}

this code also handle feedcodes with length less than 3 (even empty strings). If you don't want to use them just filter them out in where statement.

MAKKAM