Che*_*ung 13 .net c# linq list asqueryable
示例代码:
List<Student> Students = new List<Student>()
{
new Student(101, "Hugo", "Garcia", new List<int>() { 91, 88, 76, 93 }),
new Student(102, "Rick", "Adams", new List<int>() { 70, 73, 66, 90 }),
new Student(103, "Michael", "Tucker", new List<int>() { 73, 80, 75, 88 }),
new Student(104, "Fadi", "Fakhouri", new List<int>() { 82, 75, 66, 84 }),
new Student(105, "Peter", "Barrows", new List<int>() { 67, 78, 70, 82 })
};
var query = from student in Students
where student.Marks.AsQueryable().All(m => m > 70)
select student;
foreach (Student student in query)
{
Console.WriteLine("{0} {1}<br />", student.FirstName, student.LastName);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我将查询更改为
var query = from student in Students
where student.Marks.All(m => m > 70)
select student;
Run Code Online (Sandbox Code Playgroud)
这也有效并产生相同的结果,那有什么区别?
对于来自远程源(例如来自数据库)的对象,需要/推荐IQueryable.
对于内存集合,它是没有用的.
在构造表达式树时使用AsQueryable.
我能想到最合适的场景.在您的示例中,假设您需要基于学生ID的数据库中的某些信息.
现在学生正在收集记忆.您需要根据学生ID触发数据库查询.
var studentList = Students.Select(s => s.Id).AsQueryAble().Select(i => remoteDBProvider.GetInfo(i));
Run Code Online (Sandbox Code Playgroud)
studentList上的任何进一步操作都将从IQueryAble接口(查询表达式)调用,并且将仅从数据源获取那些记录,这些记录应作为最终查询结果返回(只要数据源,remoteDBProvider.GetInfo
示例中的返回值,支持QueryProvider).