注:View方法的有一个重载:接收两个string类型的参数,接收一个string类型和一个object类型的参数(强制类型(object))。
IQueryable<T>接口派生于IEnumerable<T>,用来表示对一个特定数据源执行查询结果。
重点知识:
1.LINQ扩展方法中延迟(Deferred)执行的有:
OrderBy/OrderByDescending
Reverse
Select
SelectMany
Skip/SkipWhile
Take/TakeWhile
Where
除以上外,其他扩展方法均立即执行。延迟LINQ扩展方法引起的一个有趣的特性是:每次对结果进行枚举时,都会从头开始求取查询的结果。即,随着数据的变化,用户可以反复的执行查询。
2.使用IQueryable<T>时,说明处理的来自于数据库的数据。
LINQ扩展方法
扩展方法 | 描述 | 延期 |
All | 如果源数据中的所有条目都与谓词匹配,则返回true | 否 |
Any | 如果源数据中至少有一条目与谓词匹配,则返回true | 否 |
Contains | 如果数据源含有指定的条目或值时,则返回true | 否 |
Count | 返回数据源中的条目数 | 否 |
First | 返回数据源中的第一个条目 | 否 |
FirstOrDefault | 返回数据源中的第一个条目或无条目时,返回默认值 | 否 |
Last | 返回数据源中的最后一个条目 | 否 |
LastOrDefault | 返回数据源中的最后一个条目或无条目时,返回默认值 | 否 |
Max Min |
返回由lambda表达式表示的最大值或最小值 | 否 |
OrderBy OrderByDescending |
基于lambda表达式返回的值对源数据进行排序 | 是 |
Reverse | 反转数据源中数据的顺序 | 是 |
Select | 设计一个查询结果 | 是 |
SelectMany | 把每个数据项投射到一个条目序列中,然后把所有结果序列连接成一个序列 | 是 |
Single | 返回数据源的第一个条目或多个匹配时,抛出异常 | 否 |
SingleOrDefault | 返回数据源的第一个条目或无条目时,返回默认值;或多个匹配时,抛出异常 | 否 |
Skip SkipWhile |
跳过指定数目的元素或当谓词匹配时跳过 | 是 |
Sum | 对谓词选定的值求和 | 否 |
Take TakeWhile |
从数据源的开始选择指定条目的元素或当谓词匹配时,选择条目 | 是 |
ToArray ToDictionary ToList |
把数据源转换成数组或其它集合类型 | 否 |
Where | 过滤掉源数据中与谓词不匹配的条目 | 是 |
-------------------------------------------------------------------------------------------------------
1.自动属性:
public class Product{ public string Name{get;set;} // 自动属性 }
2.对象初始化器:
Product myProduct=new Product { Id=100,Name="kaid",Price=275M };
3.扩展方法:给那些不是你定义或拥有的类添加方法。
1.this关键字 (this ShoppingCart cartParam)
2.静态类
3.静态方法
4.只能使用有权访问的类成员
public class ShoppintCart{ public List<Product> Products{get;set;} }
public static class MyExtensionMethods{ public static decimal TotalPrices(this ShoppingCart cartParam){ decimal total=0; foreach(Product prod in cartParam.Products){ total+=prod.Price; } return total; } }
接口扩展:
IEnumerable<Product>
public static class MyExtensionMethods{ public static decimal TotalPrices(this IEnumerable<product> cartParam){ decimal total=0; foreach(Product prod in cartParam){ total+=prod.Price; } return total; } }
4.Async方法
运用async和await关键字:
public class MyAsyncMethod{ public async static Task<Long?> GetPagelength(){ HttpClient client=new HttpClient(); var httpMessage=await client.GetAsync("htttp://appress.com");//表示要等待GetAsync方法所返回的Task的结果,并继续执行同一方法中的其他语句。
//todo:等待过程中,可做其他事情
return httpMessage.Content.Headers.ContentLength;
}
}