欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#学习日记4

程序员文章站 2022-06-23 14:51:01
1.LINQ强制执行解析:要强制立即执行任何查询并缓存其结果,可调用ToList或ToArray方法。如下所示:List numQuery2 = (from num in numbers where (num % 2) == 0 select num).ToList();var numQuery3 = (from num in numbers where (num % 2) == 0 select num).ToArray();2.查询关键字解析:[1]from:指定数据...

1.LINQ强制执行
解析:要强制立即执行任何查询并缓存其结果,可调用ToList或ToArray方法。如下所示:

List<int> numQuery2 = (from num in numbers where (num % 2) == 0 select num).ToList();
var numQuery3 = (from num in numbers where (num % 2) == 0 select num).ToArray();

2.查询关键字
解析:
[1]from:指定数据源和范围变量[类似于迭代变量]。
[2]where:基于由逻辑AND和OR运算符[&&或||]分隔的一个或多个布尔表达式筛选源元素。
[3]select:指定执行查询时,所返回序列中元素的类型和形状。
[4]group:根据指定的密钥值对查询结果分组。
[5]into:提供可作为对join、group或select子句结果引用的标识符。
[6]orderby:根据元素类型的默认比较器对查询结果进行升序或降序排序。
[7]join:基于两个指定匹配条件间的相等比较而联接两个数据源。
[8]let:引入范围变量,在查询表达式中存储子表达式结果。
[9]in:join子句中的上下文关键字。
[10]on:join子句中的上下文关键字。
[11]equals:join子句中的上下文关键字。
[12]by:group子句中的上下文关键字。
[13]ascending:orderby子句中的上下文关键字。
[14]descending:orderby子句中的上下文关键字。

3.标准查询运算符
解析:
[1]对数据进行排序
[2]集运算
[3]筛选数据
[4]限定符运算
[5]投影运算
[6]数据分区
[7]联接运算
[8]数据分组
[9]生成运算
[10]相等运算
[11]元素运算
[12]转换数据类型
[13]串联运算
[14]聚合运算

4.Dispose()方法
解析:释放由System.ComponentModel.Component使用的所有资源。

5.System.Data命名空间
解析:System.Data命名空间提供对表示ADO.NET结构的类的访问。通过ADO.NET,可以生成可有效管理多个数据源的数据的组件。
[1]DataSet:表示数据的内存中缓存。DataTable:表示内存中数据的一个表。
[2]ADO.NET结构的核心是DataSet类。每个DataSet都可以包含多个DataTable对象,而每个DataTable都包含单个数据源[比如SQL Server]的数据。
[3]通过使用System.Data.SqlClient命名空间[用于SQL Server的.NET Framework数据提供程序]
[4]System.Data.Odbc命名空间[用ODBC的.NET Framework数据提供程序]、System.Data.OleDb命名空间[用于OLE DB的.NET Framework数据提供程序]或System.Data.OracleClient命名空间[用于Oracle的.NET Framework数据提供程序],可以访问数据源从而用于DataSet。
[5]Each.NET Framework数据提供程序都有一个相应DataAdapter用作数据源之间的桥梁和DataSet。

6.connectingStrings读写操作
解析:ConnectionStrings最主要用于数据库连接,IP地址和端口号等。如下所示:

<connectionStrings>
	<add name="sbd" connectionString="Data Source=localhost;port=3306;Initial Catalog=sbd;uid=root;pwd=root;SslMode=none;" providerName="MySql.Data.MySqlClient" />
</connectionStrings>

说明:AppSettings主要用于应用程中的一些配置信息,比如上传文件路径等。

7.SqlConnection
解析:
[1]常用属性

ConnectionString:获取或设置用于打开SQL Server数据库的字符串。
ConnectionTimeout:获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。 
Database:获取当前数据库或连接打开后要使用的数据库的名称。 
DataSource:获取要连接的SQL Server实例的名称。 
PacketSize:用来与SQL Server的实例进行通信的网络数据包的大小,以字节为单位。
ServerVersion:获取包含客户端连接的SQL Server实例的版本的字符串。 
State:指示最近在连接上执行网络操作时,SqlConnection的状态。 
StatisticsEnabled:如果设置为true,则对当前连接启用统计信息收集。
WorkstationId:获取标识数据库客户端的一个字符串。

[2]常用方法

Open():打开连接
Close():关闭连接
CreateCommand():创建SqlCommand对象
GetSchema():获取数据库架构信息

说明:System.Data.CommandType.StoredProcedure指定如何解释命令字符串。

8.关于winform的appconfig读写操作
解析:

Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(file, ConfigurationUserLevel.None);

9.SqlDataAdapter
解析:
[1]sqlDataadapter的作用是实现Dataset和DB之间的桥梁,比如将对DataSet的修改更新到数据库。如果只需要执行SQL语句或SP,就没必要用到DataAdapter,直接用SqlCommand的Execute系列方法就可以。
[2]SqlDataAdapter的UpdateCommand的执行机制是:当调用SqlDataAdapter.Update()时,检查DataSet中的所有行,然后对每一个修改过的Row执行SqlDataAdapter.UpdateCommand,也就是说如果未修改DataSet中的数据,SqlDataAdapter.UpdateCommand不会执行。
SqlDataAdapter属性、方法和事件,如下所示:
[1]属性

①AcceptChangeDuringFill:确定由DataAdapter所获取的行的RowState[默认为True]。
②DeleteCommand:获取或设置一个Transact-SQL语句或存储过程,以从数据集删除记录。
③InsertCommand:获取或设置一个Transact-SQL语句或存储过程,以在数据源中插入新记录。
④SelectCommand:获取或设置一个Transact-SQL语句或存储过程,用于在数据源中选择记录。
⑤UpdateCommand:获取或设置一个Transact-SQL语句或存储过程,用于更新数据源中的记录。
⑥TableMappings:SqlDataAdapter用来将查询的结果映射到DataSet的信息集合。
⑦ContinueUpdate:控制SqlDataAdapter在遇到一个错误之后是否继续提交更改[默认为false]

[2]方法

①Fill:执行存储于SelectCommand中的查询,并将结果存储在DataTable中。
②FillSchema:为存储在SelectCommand中存储的查询获取架构信息。获取查询中的各列名称和数据类型。
③GetFillParameters:为SelectCommand获取一个包含着参数的数组。
④Update:向数据库提交存储在DataSet[或DataTable、DataRows]中的更改。该方法会返回一个整数值,其中包含着在数据存储中成功更新的行数。

[3]事件

①FillError:当DataAdapter遇到填充DataSet或DataTable的一个错误时,该事件被触发。
②RowUpdated:向数据库提交一个修改的行之后被触发。
③RowUpdating:向数据库提交一个修改的行之前被触发。

10.SqlCommand方法
解析:

[1]BeginExecuteNonQuery:启动此SqlCommand描述的Transact-sql语句或存储过程的异步执行,通常执行INSERT、DELETE、UPDATE和SET语句等命令。对BeginExecuteNonQuery的每个调用必须与完成操作的EndExecuteNonQuery配对,通常在单独的线程上完成。
[2]BeginExecuteReader:启动此SqlCommand描述的Transact-sql语句或存储过程的异步执行,并从服务器中检索一个或多个结果集。对BeginExecuteReader的每个调用必须与完成操作的EndExecuteReader配对,通常在单独的线程上完成。
[3]BeginExecuteXmlReader:启动此SqlCommand描述的Transact-SQL语句或存储过程的异步执行。对BeginExecuteXmlReader的每个调用都必须与对EndExecuteXmlReader的调用配对,后者通常在单独的线程上完成操作,并返回XmlReader对象。
[4]ExecuteReader:执行返回行的命令。为了提高性能,ExecuteReader使用Transact-sqlsp_executesql系统存储过程来调用命令。因此,ExecuteReader可能不会产生所需的效果,因为用于执行Transact-sql SET语句等命令。
[5]ExecuteNonQuery:执行Transact-sqlINSERT、DELETE、UPDATE和SET语句等命令。
[6]ExecuteScalar:从数据库中检索单个值[例如聚合值][7]ExecuteXmlReader:将CommandText发送到Connection,并生成一个XmlReader对象。

11.语言集成查询和链式方法查询
解析:

[1]var query = from r in students where r.score < 60 orderby r.score select r;
[2]var query2= students.Where(r => r.score < 60).OrderBy(r => r.score).Select(r => r);

12.Queryable所有扩展方法
解析:
[1]Aggregate:为集合的元素应用一个累加器,可以指定累加器的实现。
[2]All:判断是否集合中所有元素都满足给定的条件。
[3]Any:判断是否集合中存在一个元素满足给定条件或者是否存在元素。
[4]Append:在集合的尾部添加元素。
[5]AsQueryable:将一个IEnumerable转化为IQueryable[对应的实现类型为EnumerableQuery]。
[6]Average:计算一个数值集合的平均值。
[7]Cast:将集合中的元素转化为指定的类型。
[8]Concat:连接两个集合。
[9]Contains:判断集合是否包含指定的元素。
[10]Count:计算集合中元素的数量。
[11]DefaultIfEmpty:获取集合,但如果集合是空的话返回包含一个默认元素的集合。
[12]Distinct:返回元素均为唯一的集合。
[13]ElementAt:获取指定索引[Index]处的元素。
[14]ElementAtOrDefault:获取指定索引[Index]处的元素,若元素为空则返回默认值。
[15]Except:获取排除指定元素后的集合。
[16]First:获取集合中的第一个元素。
[17]FirstOrDefault:获取集合中的第一个元素,若为空则返回默认值。
[18]GroupBy:使用指定的条件对集合进行分组,使用指定方式构建新元素并返回新的集合。
[19]GroupJoin:分组与关联两个存在“主外键”关系的集合。
[20]Intersect:对比指定集合获取交叉项,可指定交叉项的对比方法。
[21]Join:使用匹配的键值关联指定的集合。
[22]Last:获取集合中的最后一个元素
[23]LastOrDefault:获取集合中的最后一个元素,若为空则返回默认值。
[24]LongCount:以Int64来返回集合中元素的数量。
[25]Max:获取指定属性值为最大的元素。
[26]Min:获取指定属性值为最小的元素。
[27]OfType:使用指定的类型过滤集合中的元素。
[28]OrderBy:对集合进行升序排序,可以指定排序的属性。
[29]OrderByDescending:对集合进行降序排序,可以指定排序的属性。
[30]Prepend:在集合的头部添加元素。
[31]Reverse:翻转集合顺序。
[32]Select:将集合中的每个元素转为指定的新的格式。
[33]SelectMany:若集合中的元素存在子集合,则可通过该方法将这些属性“选择”出来并生成一个新的集合。
[34]SequenceEqual:判断是否与指定的集合相同。
[35]Single:获取集合中唯一一个元素,若集合元素为空或超过一个将抛出异常。
[36]SingleOrDefault:获取结合中唯一一个元素,若集合元素为空或超过一个则获取默认值。
[37]Skip:跳过指定数量的元素:并返回剩余元素的集合。
[38]SkipLast:从尾部开始跳过指定数量元素,并返回剩余元素集合。
[39]SkipWhile:跳过指定条件的元素,并返回剩余元素集合。
[40]Sum:计算集合中指定属性值得总和。
[41]Take:从头部开始获取指定个数的元素。
[42]TakeLast:从尾部开始获取指定个数的元素。
[43]TakeWhile:获取满足指定条件的元素的集合。
[44]ThenBy:以升序对集合进行二次排序。
[45]ThenByDescending:以降序对集合进行二次排序。
[46]Union:合并两个集合。
[47]Where:指定的条件过滤集合。
[48]Zip:使用指定的方式结合两个集合。

13.AsEnumerable(),AsQueryable()和ToList()
解析:
[1]AsQueryable将一个序列向下转换为一个IQueryable,它生成了一个本地查询的IQueryable包装。
[2]AsEnumerable将一个序列向上转换为一个IEnumerable,强制将Enumerable类下面的查询操作符绑定到后续的子查询当中。
[3]调用ToList()会立刻查询并保存结果,而不会等到迭代时才查询,作用和lazyload是相反的。

14.IQueryable接口与IEnumberable接口区别
解析:IEnumerable<T>泛型类在调用自己的SKip和Take等扩展方法之前数据就已经加载在本地内存里了,而IQueryable<T>是将Skip、take这些方法表达式翻译成T-SQL语句之后再向SQL服务器发送命令,它并不是把所有数据都加载到内存里来才进行条件过滤。

15.联接操作符Join
解析:Join操作符类似于T-SQL中的inner join,它将两个数据源相联接,根据两个数据源中相等的值进行匹配。

16.联接操作符GroupJoin
解析:GroupJoin操作符常应用于返回“主键对象-外键对象集合”形式的查询,比如“产品类别-此类别下的所有产品”。

17.UNION和UNION ALL
解析:
[1]UNION:UNION操作符用于合并两个或多个SELECT语句的结果集。
[2]UNION ALL:默认地,UNION操作符选取不同的值。如果允许重复的值,请使用UNION ALL。

18.C# virtual修饰方法或属性
解析:在这种情况下,方法或属性被称作虚拟成员。虚拟成员的实现可由派生类中的重写成员更改。

19.LINQ中的join
解析:Join操作符类似于T-SQL中的inner join,它将两个数据源相联接,根据两个数据源中相等的值进行匹配。例如,可以将产品表与产品类别表相联接,得到产品名称和与其相对应的类别名称。查询语法如下所示:

var query =
	(from p in db.Products
     join c in db.Categories on p.CategoryID equals c.CategoryID
     where p.CategoryID == 1
     select new { p.ProductID, p.ProductName, c.CategoryID, c.CategoryName }).ToList();

方法语法如下所示:

var q =
    db.Products
    .Join
    (
        db.Categories,
        p => p.CategoryID,
        c => c.CategoryID,
        (p, c) => new { p.ProductID, p.ProductName, c.CategoryID, c.CategoryName }
    )
    .Where(p => p.CategoryID == 1)
    .ToList();

20.LINQ中的GroupJoin
解析:GroupJoin操作符常应用于返回“主键对象-外键对象集合”形式的查询,例如“产品类别-此类别下的所有产品”。查询语法如下所示:

var query =
    (from c in db.Categories
     join p in db.Products on c.CategoryID equals p.CategoryID into r
     select new
     {
        c.CategoryName,
        Products = r
     }).ToList();

方法语法如下所示:

var q =
		db.Categories
		.GroupJoin
		(
			db.Products,
			c => c.CategoryID,
			p => p.CategoryID,
			(c, p) => new
			{
				c.CategoryName,
				Products = p
			}
		)
		.ToList();

返回结果如下所示:
C#学习日记4

21.C#日志框架
解析:
[1]NLog
[2]Serillog

22.三层架构
解析:
[1]表现层[UI]
[2]业务逻辑层[Business Logic Layer,BLL]
[3]数据访问层[DAL]+实体类库[Model]

23.let子句
解析:引入用来临时保存查询表达式中的字表达式结果的范围变量。

24.into子句
解析:提供一个临时标识符。join子句、group子句或select子句可以通过该标识符引用查询操作中的中间结果。

25.C#协变和逆变
解析:
[1]协变:指能够使用与原始指定的派生类型相比,派生程度更大的类型。
[2]逆变:指能够使用派生程度更小的类型。
[3]协变->和谐的变->很自然的变化->string->object协变->狗是动物
[4]逆变->逆常的变->不正常的变化->object->string逆变->动物是狗
[5]out协变:一个泛型参数标记为out,代表它是用来输出的,作为结果返回
[6]in逆变:一个泛型参数标记为in,代表它是用来输入的,只能作为参数

本文地址:https://blog.csdn.net/shengshengwang/article/details/108988451