2010-09-22 123 views
0

我有一个DataTable。我也可以使用Linq。 在DataTable有很多列和行。其中一列称为feedCode。其类型是string。在database它的长度是7 varchar,可以为空。最匹配的字段值

feedCode可以包含的值作为9051245,9051246,9051247,9031454,9021447

方法必须返回最匹配的(在这种情况下从905开始)值(字符串的前3个字符)?

谢谢。

+0

您能否详细说明您的问题。特别是我无法理解mached。你的意思是匹配吗?如果是这样的话,你的意思是从905开始的字符串?或最近的数字为905?或... – flq 2010-09-22 07:35:10

+0

@flq,谢谢,我修改了问题文本。 – loviji 2010-09-22 07:52:00

回答

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问前三个字符中最发生的组,而不是最有发生的partical组的饲料代码。 – 2010-09-22 08:43:06