LINQ Learning-QueryExecution(延迟加载)、SetOperators
QueryExecution
int[] numbers = new int[] { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 }; int i = 0; var simpleQuery = from num in numbers select ++i; //i的个数不会增加,直到语句被真正执行,即到foreach的时候 Console.WriteLine("The current value of i is {0}", i); //i为0 foreach (var item in simpleQuery) { Console.WriteLine("v = {0}, i = {1}", item, i); }
然后将上面代码中select部分替换(像ToList()、Max()、Count()等方法会立即执行query语句):
var immediateQuery = ( from num in numbers select ++i) .ToList();
这时再执行后面的输入,i已经为10了。
SetOperators
int[] numbersA = { 0, 2, 4, 5, 6, 8, 9 };
int[] numbersB = { 1, 3, 5, 7, 8 };
Union: var uniqueNumbers = numbersA.Union(numbersB); 0, 2, 4, 5, 6, 8, 9,1,3,7 AB并集
Intersect:var commonNumbers = numbersA.Intersect(numbersB); 5,8 AB交集
Except: IEnumerable<int> aOnlyNumbers = numbersA.Except(numbersB); 0, 2, 4, 6, 9 A有B无