1. Where

  限制操作符Where用于过滤序列,按照提供的逻辑对序列中的数据进行过滤。Where可以出现多次。

1.1 原型定义

public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate);

1.2 单个限制条件

var products = from p in context.Products
where p.UnitPrice > 10m
select p;
var products = context.Products
.Where(p => p.UnitPrice > 10m);
Func<Product, bool> filter = delegate(Product p) { return p.UnitPrice > 10m; };
var query = context.Products
.Where(filter)
.Select(p => new { p.ProductID, p.ProductName });
// using System.Linq;
int[] fibonacci = new int[] { , , , , , , , };
IEnumerable<int> query = Enumerable.Where(fibonacci, f => f > );
query.ToList().ForEach(f =>
{
Console.WriteLine(f);
});

1.3 多个过滤条件

var products = from p in context.Products
where p.UnitPrice > 10m && p.ProductName.StartsWith("LINQ")
select p;
var products = context.Products
.Where(p => p.UnitPrice > 10m && p.ProductName.StartsWith("LINQ"));
var expr = context.Products
.Where(p => p.UnitPrice > 10m)
.Where(p => p.ProductName.StartsWith("LINQ"));

1.4 Lambda多参数表达式

int[] fibonacci = new int[] { , , , , , , ,  };
var expr = fibonacci.Where((f, index) => f > && index > );
foreach (var item in expr)
{
Console.WriteLine(item);
}

1.5 自定义实现

  LINQ是在C#3.0出现的,在C#2.0及之前没有LINQ的支持,接下来为LINQ Where操作符的自定义实现。

  C#2.0实现方式:

public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate);
using System;
using System.Collections.Generic;
using System.Text; namespace Northwind.CustomLINQExtension
{
public static class CustomLINQExtension
{
public delegate TResult Func<in T, out TResult>(T arg);
public static IEnumerable<TSource> Where<TSource>(IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
foreach (TSource element in source)
{
if (predicate(element))
{
yield return element;
}
}
}
}
}
using System;
using System.Collections.Generic;
using System.Text; namespace Northwind.CustomLINQExtension
{
class Program
{
static void Main(string[] args)
{
int[] fibonacci = new int[] { , , , , , , , }; IEnumerable<int> expr = CustomLINQExtension.Where(fibonacci, (delegate(int i) { return i > ; }));
foreach (int item in expr)
{
Console.WriteLine(item);
}
}
}
}

  由于在C#2.0中没有扩展方法,调用实现的自定义扩展类需要使用类名。

  在C#3.0中增加了扩展方法,在C#3.0自定义LINQ Where限制条件,不使用系统LINQ自带。

using System;
using System.Collections.Generic;
using System.Text; namespace Northwind.CustomLINQExtension
{
public static class CustomLINQExtension
{
public delegate TResult Func<in T, out TResult>(T arg);
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, bool> predicate)
{
foreach (TSource element in source)
{
if (predicate(element))
{
yield return element;
}
}
}
}
}
using System;
using System.Collections.Generic;
using System.Text; namespace Northwind.CustomLINQExtension
{
class Program
{
static void Main(string[] args)
{
int[] fibonacci = new int[] { , , , , , , , }; IEnumerable<int> expr = fibonacci.Where(delegate(int i) { return i > ; });
foreach (int item in expr)
{
Console.WriteLine(item);
}
}
}
}

最新文章

  1. 谈谈Ruby中的类变量
  2. phpcms标签使用 —— 系统常量
  3. simpleBLEPeripheral.c 文件分析
  4. mysql的部分命令图解
  5. Zabbix简介(第一章第一节)
  6. ADT通过svn进行团队开发,svn插件不好使的解决方案
  7. GridView控件-01-[简单的数据显示]
  8. 2014年最新的辛星html、css教程打包公布了,免积分,纯PDF(还有PHP奥)
  9. WINDOWS下安装PHP7出现PHP-CGI无法启动
  10. Chrome浏览器网页截全屏算法以及实现
  11. JS前端三维地球渲染——中国各城市航空路线展示
  12. copy&amp;deepcopy
  13. (七)java类和对象
  14. webstorm2018.1 汉化
  15. 有标号的DAG计数I~IV
  16. HackerRank-Python攻城歷程-3.List( Find the Second Largest Number )
  17. 编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串&#39;welcome to masm!&#39;
  18. vcf格式简介
  19. MySQL8.0.12版本的数据库驱动
  20. shell中$*与$@的区别

热门文章

  1. spark 2.0 中 pyspark 对接 Ipython
  2. 有关DOM
  3. CSS中各种各样居中方法的总结
  4. bzoj1412最小割
  5. API,框架,组件
  6. Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
  7. *HDU 1398 母函数
  8. System.Web.HttpContext.Current.Session为NULL解决方法
  9. bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)
  10. aspnet_isapi.dll设置图文介绍.net的程序实现伪静态