3月11日 Linq To SQL 学习

首先发一张Linq的图,是从LINQpad工具提供的网址down下来的,讲解啦Linq的基本查询语句,嘿嘿
接下来是
1.延迟加载(deferred loading)。
如果,在声明的时候就返回的结果集是对象的集合。你可以使用ToList() 或ToArray()方法把查询结果先进行保存,然后再对这个集合进行查询
例子:
var numbers = new List<int>();
numbers.Add(1);
IEnumerable<int> query = numbers.Select(n => n * 10);
gvList.DataSource = query;
numbers.Add(2);
gvList.DataBind(); //此时结果为两条,10,20
var numbers = new List<int>();
numbers.Add(1);
IEnumerable<int> query = numbers.Select(n => n * 10).ToList();
numbers.Add(2);
gvList.DataSource = query;
gvList.DataBind(); //保存查询结果后,为一条10
另一个比较好玩的例子是这个~
IEnumerable<char> query = "Not what you might expect";
query = query.Where(c => c != 'a');
query = query.Where(c => c != 'e');
query = query.Where(c => c != 'i');
query = query.Where(c => c != 'o');
query = query.Where(c => c != 'u');
new string(query.ToArray()); //结果是:Nt wht y mght xpct 跟预期效果一样
query = "Not what you might expect";
foreach (char vowel in "aeiou")
query = query.Where(c => c != vowel);
new string(query.ToArray()); //结果是:Not what yo might expect 只是少了u
有了Reflector反编译出来的代码更容易理解
new string(query.Where<char>(delegate (char c) {
return (c != 'a');
}).Where<char>(delegate (char c) {
return (c != 'e');
}).Where<char>(delegate (char c) {
return (c != 'i');
}).Where<char>(delegate (char c) {
return (c != 'o');
}).Where<char>(delegate (char c) {
return (c != 'u');
}).ToArray<char>());
query = "Not what you might expect";
foreach (char vowel in "aeiou")
{
query = query.Where<char>(delegate (char c) {
return c != vowel;
});
}
new string(query.ToArray<char>());
所以要注意循环和延迟加载的问题..
浙公网安备 33010602011771号