Linq 中string转换为int 取得Max值和Mix值(利用ConvertAll转换)

var  boxnum = "1,2,3,4,5,6,7,8,9,10,";

var ssd = boxnum.Split(',').Where(p => !string.IsNullOrEmpty(p.Trim())).Max(); 输出的是 9

我想获取这里面的最大值结果用 boxnum.Split(',').Max()得出的最大值是9.结果不对。 由于split后结果是生成是数组形式的数据,查询了下原因由于是字符串比较,9大于10,第一个字符为“1”.


split后结果是生成是数组形式的数据:

Linq 中string转换为int 取得Max值和Mix值(利用ConvertAll转换)_第1张图片

经过问我的笨哥还有查询解决方法如下:利用 来转换,


ConvertAll 将当前 List 中的元素转换为另一种类型,并返回包含转换后的元素的列表


publicList<TOutput> ConvertAll<TOutput> (Converter<T,TOutput> converter)

 

调用委托

System.Converter<TInput,TOutput>

publicdelegate TOutputConverter<TInput, TOutput>(TInput input);

将对象从一种类型转换为另一种类型的方法

 

  1. 将当前 List 中的元素转换为另一种类型,并返回包含转换后的元素的列表

 

标准委托

publicstaticvoid Main()

{

List<string> ls =newList<string>() {"1","2","3" };

 

//System.Converter<string, int> cw=new Converter<string,int>(stringToint);

//List<int> li = ls.ConvertAll<int>(cw);

 

List<int> li= ls.ConvertAll<int>(stringToint);

 

}

publicstaticint stringToint(string s)

{

returnint.Parse(s);

}

匿名方法

List<string> ls =newList<string>() {"1","2","3" };

List<int> li = ls.ConvertAll<int>(delegate(string s) { return int.Parse(s); });

Lambda表达式

List<string> ls =newList<string>() {"1","2","3" };

List<int> li = ls.ConvertAll<int>(i=>int.Parse(i));

集合扩展方法

List<string> ls =newList<string>() {"1","2","3" };

// System.Collections.Generic.IEnumerable<int> li = ls.Select(i => int.Parse(i)); ;

var li = ls.Select(i=>int.Parse(i));

 

  1. 将当前 List 中的元素值批量修改

staticvoid Main(string[] args)

{

List<string> ls =newList<string>() {"1","2","3" };

List<string> li = ls.ConvertAll<string >(stringAdd);

}

 

publicstaticstring stringAdd(string s)

{

return s+"wxd";

}

 

详细地址  http://www.cnblogs.com/foundation/archive/2009/01/05/1369371.html 感谢


var  boxnum = "1,2,3,4,5,6,7,8,9,10,";
        

方法一:
var test1 = boxnum.Split(',').Where(p=>!string.IsNullOrEmpty(p.Trim())).ToList().ConvertAll<int>(p => int.Parse(p));

取得数据为:

Linq 中string转换为int 取得Max值和Mix值(利用ConvertAll转换)_第2张图片

可以直接 test1.Max()或者

var test1 = boxnum.Split(',').Where(p=>!string.IsNullOrEmpty(p.Trim())).ToList().ConvertAll<int>(p => int.Parse(p)).Max();

结果response:10

方法二:
 List<int> result = new List<string>(boxnum.Split(',').Where(p => !string.IsNullOrEmpty(p.Trim()))).ConvertAll(i => int.Parse(i));

取得数据效果图和方法一一样。就不贴图了

resulut.Max() =》response:10


方法三:

	int max = 0;
			var rtn = from b in
						  (from a in boxnum.Split(',')
						   where !string.IsNullOrEmpty(a.Trim())
						   select new { IsInt = int.TryParse(a, out max), Str = a })
					  where b.IsInt
					  select int.Parse(b.Str);

resulut.Max() =》response:10

补充老曹给的例子:

方法四:

var ssss = boxnum.Split(',').Where(p => !string.IsNullOrEmpty(p.Trim())).Select(x => int.Parse(x)).Max();

输出10

方法五:
 var sdd = boxnum.Split(',').Where(p => !string.IsNullOrEmpty(p.Trim())).OrderBy(x => x.Length).ThenBy(x => x).First(); =>Last();

First() 输出最小值 1

Last() 输出最大值10

以上5种方法如果出现 数字以外的字符,那样写法就会报错的。则可以使用OfType<T>()

PS:

如果object数组中有整数和字符串,现在想找出其中最大的数则用【OfType<T>():用来将序列中可以转换的转换为指定的序列】

object[] test= {1,233,4,5,555,"cc","dff" };
 int max=test.OfType<int>().Max();

//获取从数据库中取出的数据(假设只有一条记录) DataTable的话则用【Cast<T>()用来将非泛型的序列转换为泛型的序列】

DataTable dt=new DataTable();

DataRow row=dt.Rows.Cast<DataRow>().Single();




你可能感兴趣的:(ConvertAll,string转换为int,Linq.Max,Linq.Mix)