以Where為例,public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
以下例進行說明:
static void Main(string[] args)
{
int[] nums = new int[] { 10, 20, 30, 40, 50 };
int sum0 = nums.Sum();
Console.WriteLine("the sum of all:{0}", sum0);//所有資料的和
int sum1 = nums.Where(n=>n%4==0).Sum();
Console.WriteLine("the sum of all:{0}", sum1);//所有是4的倍數的資料的和
int sum2 = nums.Where((n, i) => i % 2 == 0).Sum();//10 + 30 + 50
Console.WriteLine("the sum of all:{0}", sum2);//所有下標是4的倍數的資料的和
}
委托呼叫的方法只有一行,使用了Lambda 方式,如果委托呼叫方法中有很多行代碼,該如何處理?
uj5u.com熱心網友回復:
額,理解一下 Func<TSource, bool>就好,他的意思是傳入一個Tsouce物件,回傳一個bool所以所以他本身不管你有多少行代碼
所以我們可以寫成
p=>{
bool res=false;
//此處省略1000w行
retrun res
}
uj5u.com熱心網友回復:
例子
//一行寫法
var q = myList.Where(x => x.ID == 1);
//多行寫法
var q1 = myList.Where(x =>
{
if (x.ID == 1)
return true;
else
return false;
});
Console.ReadKey();
uj5u.com熱心網友回復:
以上我舉得例子是LINQ to Object,針對泛型集合中的每一個泛型物件進行篩選。如果是LINQ to Dataset,傳入的是一個轉換后的資料集物件,每一行也算一個物件?而使用的可能欄位物件,代碼的寫法也不同了。例如:var result = from b in ds.Tables["tb_Bookinfo"].AsEnumerable() where b.Field<DateTime>("b_pub_date").Month ==3
aelect new
{
......
}
不是將委托作為方法的引數了,where后跟Predicate?
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/283949.html
標籤:LINQ
上一篇:學歷不夠
下一篇:Socket 連接騰訊云
