在C#中,LINQ(Language Integrated Query)是一种强大的查询语言,它允许你以声明式的方式查询和操作数据。其中,Select和SelectMany是两个非常重要的操作符,它们在处理集合时非常有用。
| 运算符 | 描述 | C#查询表达式语法 |
|---|---|---|
| Select | 操作转换函数的基础项目值 | select |
| SelectMany | 操作项目的值是根据上的转换函数,以及拼合成一个单一的序列的序列 | 使用多个from子句 |
Select操作符用于将一个集合中的每个元素投影(转换)成一个新的形式。这意味着你可以使用Select来改变集合中元素的形状或提取元素的某些部分。Select通常用于执行一对一的转换。
SelectMany操作符用于将集合的集合(或者说是集合中的元素的集合)展平为一个集合。这意味着它可以将多对一或多对多的关系转换为一对一的关系。SelectMany非常适用于处理嵌套集合的场景。
一个例子
C#private void btnSearch_Click(object sender, EventArgs e)
{
List<string> words=new List<string>()
{
"张飞",
"关羽",
"刘备",
"刘封",
"刘禅"
};
var ret = from it in words
select it.Substring(0, 1);
foreach (var item in ret)
{
lstMain.Items.Add(item);
}
}
查询是一组指令,描述要从给定数据源(或源)检索的数据以及返回的数据应具有的形状和组织。 查询与它生成的结果不同。
从应用程序的角度来看,原始源数据的特定类型和结构并不重要。 应用程序始终将源数据视为 IEnumerable 或 IQueryable 集合。
LINQ查询表达式包含8个基本子句,分别为from、select、group、where、orderby、join、let和into
| 子 句 | 说 明 |
| from | 指定数据源和范围变量 |
| select | 指定当执行查询时返回的序列中的元素将具有的类型和形式 |
| group | 按照指定的键值对查询结果进行分组 |
| where | 根据一个或多个由逻辑“与”和逻辑“或”运算符(&&或 |
| orderby | 基于元素类型的默认比较器按升序或降序对查询结果进行排序 |
| join | 基于两个指定匹配条件之间的相等比较来连接两个数据源 |
| let | 引入一个用于存储查询表达式中的子表达式结果的范围变量 |
| into | 提供一个标识符,它可以充当对join、group或select子句的结果的引用 |
语言集成查询 (LINQ) 为 C# 和 Visual Basic 提供语言级查询功能和高阶函数 API,让你能够编写具有很高表达力度的声明性代码。
LINQ就像是一个万能的数据查询语言,让你可以用同样的语法来搜索和操作各种数据源(数据库、XML、对象集合等),就像用同一把钥匙能开不同的锁一样。
LINQ 的历史
从语言方面的进化
–委托
–匿名方法
–Lambda表达式
–Linq查询表达式
LINQ是什么
在C#中使用GDI+绘制贝塞尔曲线可以通过Graphics类的DrawBezier方法或者使用路径(GraphicsPath)对象然后添加贝塞尔曲线到路径中。如果想要添加多个贝塞尔曲线段,可以使用GraphicsPath对象的AddBezier或AddBeziers方法。这里,我们将通过AddBezier方法的使用来介绍如何绘制贝塞尔曲线。
想象你要画一条从A点到B点的曲线:
公式推导
对于一阶贝塞尔的话,最终得到的曲线还是一条直线,不过还是可以列一下通式方便后续推导:
在C#中,使用GDI+(Graphics Device Interface Plus)可以绘制各种图形,包括多边形。DrawPolygon方法是用来绘制多边形的。这个方法需要一个Pen对象来定义多边形的边界样式(颜色、宽度等),以及一个点数组Point[]来定义多边形的各个顶点。
| DrawPolygon(Pen, PointF[]) | 绘制由一组 PointF 结构定义的多边形。 |
| DrawPolygon(Pen, Point[]) | 绘制由一组 Point 结构定义的多边形。 |