Linq Lambda总结

Linq以及lambda表达式总结
1:查询结果转换成List,[]
若要强制立即执行任意查询并缓存其结果,可以调用 ToList<(Of <(TSource>)>) 或 ToArray<(Of<(TSource>)>) 方法。
ToList可以转换为List
ToArray转换为数组[]

List numQuery2 =
(from num in numbers
where (num % 2) == 0
select num).ToList();

// or like this:
// numQuery3 is still an int[]

var numQuery3 =
(from num in numbers
where (num % 2) == 0
select num).ToArray();

2:查询结果取第一个值
可以用.FirstOrDefault()或者.First()
若查询结果为空,仍然强制取值的话。
FirstOrDefault 这个方法在根据条件查不出对象的话会取默认对象而不会像First那样给一个null值.当使用First的话,若查询结果为空,会报错如下3中所示。
3:报错 Operation is not valid due to the current state of the object
错误原因是查询的结果为空,仍强制使用诸如First()来取值。。

4:排序,取最小值,取最小值所在的项
4.1 排序
listOfOpenList.OrderBy(item => item.FValue).ToList();
listOfOpenList.OrderByDescending(item => item.FValue).ToList();
以上两种是Lambda表达式的写法,下面是标准linq的写法:
(from c in listOfOpenList
orderby c.id descending//ascending
select c).ToList();
4.2 取最小(大)值
List.Min(item=>item.value);

(from c in list
select c.value).Min()//Max()

4.3 取最小值所在项
listOfOpenList.OrderBy(item => item.FValue).First();
补充:取最大值所在项,如下,先倒序,再取第一个值。
listOfOpenList.OrderByDescending(item => item.FValue).First();
取最大值的话,就按顺序排列,然后用Last()来取值也可以实现。

4.4 排序后取前N项
List b = (from a in listOfEnemies
orderby Vector3.Distance(player.transform.position, a.transform.position)//orderby默认的是升序
select a).Take(count).ToList();

猜你喜欢

转载自blog.csdn.net/iningwei/article/details/88936545
今日推荐