我有一個DataTable
。我也可以使用Linq
。 在DataTable
有很多列和行。其中一列稱爲feedCode。其類型是string
。在database
它的長度是7 varchar
,可以爲空。最匹配的字段值
feedCode可以包含的值作爲9051245,9051246,9051247,9031454,9021447。
方法必須返回最匹配的(在這種情況下從905開始)值(字符串的前3個字符)?
謝謝。
我有一個DataTable
。我也可以使用Linq
。 在DataTable
有很多列和行。其中一列稱爲feedCode。其類型是string
。在database
它的長度是7 varchar
,可以爲空。最匹配的字段值
feedCode可以包含的值作爲9051245,9051246,9051247,9031454,9021447。
方法必須返回最匹配的(在這種情況下從905開始)值(字符串的前3個字符)?
謝謝。
嘗試使用此代碼:
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語句中過濾它們。
也許我沒有正確地理解你的問題,但也許這將是一個起點,您:
//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());
}
我想loviji問前三個字符中最發生的組,而不是最有發生的partical組的飼料代碼。 – 2010-09-22 08:43:06
您能否詳細說明您的問題。特別是我無法理解mached。你的意思是匹配嗎?如果是這樣的話,你的意思是從905開始的字符串?或最近的數字爲905?或... – flq 2010-09-22 07:35:10
@flq,謝謝,我修改了問題文本。 – loviji 2010-09-22 07:52:00