2010-09-22 89 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