我有一个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