我有DataTable
。我也可以使用Linq
。
在DataTable
中有许多列和行。其中一列称为 feedCode 。它的类型是string
。在database
中,它的长度为7 varchar
,可以为空。
feedCode 可能包含 9051245,9051246,9051247,9031454,9021447 的值。
方法必须返回最匹配的(在本例中以905开头)值 905 (字符串的前3个字符)?
感谢。
答案 0 :(得分: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());
}
答案 1 :(得分: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
}
此代码还处理长度小于3的源代码(即使是空字符串)。如果您不想使用它们,只需在where语句中过滤掉它们。