1,LINQ概念
LINQ可以为c#和Visual Basic提供强大的查询功能,LINQ主要分为三部分,LINQ to ADO.NET、LINQ to Objects、LINQ to XML。
其中LINQ to ADO.NET又分为两部分,LINQ to SQL,LINQ to DataSet。在这里说一下dataset的概念,dataset对象就像存放在内存中的一个小型数据库,它可以包括数据表,数据列,数据行,视图,约束以及关系。通常dataset对象的数据来源于数据库或者XML。
LINQ to SQL只适用于SQL server数据库,目前这种方式已经被淘汰,很少去使用,这里不再介绍。
LINQ to Objects,LINQ还可以像操作数据库中数据那样操作内存中数据,即操作数组和集。
LINQ to XML 提供了修改文档对象模型的内存文档。
其中LINQ to ADO.NET又分为两部分,LINQ to SQL,LINQ to DataSet。在这里说一下dataset的概念,dataset对象就像存放在内存中的一个小型数据库,它可以包括数据表,数据列,数据行,视图,约束以及关系。通常dataset对象的数据来源于数据库或者XML。
LINQ to SQL只适用于SQL server数据库,目前这种方式已经被淘汰,很少去使用,这里不再介绍。
LINQ to Objects,LINQ还可以像操作数据库中数据那样操作内存中数据,即操作数组和集。
LINQ to XML 提供了修改文档对象模型的内存文档。
2,LINQ to DataSet
使用dataset,就要想数据库中进行数据查询,这里使用的是Oracle数据库,最终目的是通过linq从dataset对象中得到datatable数据,但是我个人感觉这样很多余,因为从dataset中很容易就可以datatable对象,没必要使用这个技术。
//创建连接字符串
string str = "Data Source=127.0.0.1/ORCL;User ID=test;PassWord=test;";
//创建连接对象
OracleConnection sqlcon;
//创建数据适配器
OracleDataAdapter sqlda;
//创建数据集合
DataSet myds;
//根据连接字符串生成连接对象
sqlcon = new OracleConnection(str);
//根据查询语句生成数据适配器
sqlda = new OracleDataAdapter("select * from tb_employee", sqlcon);
//创建数据集合,并用查到的数据填充
myds = new DataSet();
sqlda.Fill(myds, "tb_employee");
//使用linq从数据集中查询所有数据
var query = from info in myds.Tables["tb_employee"].AsEnumerable() select info;
//创建DataTable对象,把查询到的数据返回给datatable对象
DataTable myDTable = query.CopyToDataTable<DataRow>();
3,LINQ to Objects
创建一个集合,并对集合中的数据进行刷选,把集合当作一个数据库
int[] intScores = { 45, 69, 29, 99, 83, 90, 40 };
var score = from hgscore in intScores
where hgscore >= 60
orderby hgscore ascending
select hgscore;
foreach (var v in score)
{
Console.WriteLine(v.ToString());
}
Console.ReadLine();
4,LINQ to XML
可以把xml文件当作一个数据库,可以进行增删改查,这里使用wpf进行效果演示,且只演示了查找和添加的方法,其他的不再演示。
先看前台代码,主要就是进行界面数据的绑定。
<Window x:Class="_20180129_linq_to_xml.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Canvas Height="350" Width="525">
<DataGrid Canvas.Top="100" Width="510" AutoGenerateColumns="False" Name="test" CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding name}" Header="姓名" Width="1*"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding sex}" Header="性别" Width="1*"></DataGridTextColumn>
<DataGridTextColumn Binding="{Binding age}" Header="年龄" Width="1*"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Canvas>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Data;
using System.Xml.Linq;
namespace _20180129_linq_to_xml
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
//通过代码想xml文件中添加数据
//加载配置文件
XElement xe = XElement.Load("D:\\workspace\\vsworkspace\\测试练习\\2018_01\\20180129_linq_to_xml\\20180129_linq_to_xml\\employee.xml");
//创建新元素
XElement es = new XElement("employee", new XElement("name", "tom"), new XElement("sex", "男"), new XElement("age", 32));
//添加
xe.Add(es);
//保存
xe.Save("D:\\workspace\\vsworkspace\\测试练习\\2018_01\\20180129_linq_to_xml\\20180129_linq_to_xml\\employee.xml");
//从xml文件中读取数据并显示到datagrid;
//创建一个数据集
DataSet myds = new DataSet();
//读取xml文件
myds.ReadXml("D:\\workspace\\vsworkspace\\测试练习\\2018_01\\20180129_linq_to_xml\\20180129_linq_to_xml\\employee.xml");
//创建集合,并把数据遍历到集合
List<Employee> mylist = new List<Employee>();
foreach (DataTable dt in myds.Tables)
{
foreach (DataRow dr in dt.Rows)
{
Employee e = new Employee();
e.name = dr[0].ToString();
e.sex = dr[1].ToString();
e.age = int.Parse(dr[2].ToString());
mylist.Add(e);
}
}
//显示数据
this.test.ItemsSource = mylist;
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<employees>
<employee>
<name>张三</name>
<sex>男</sex>
<age>20</age>
</employee>
<employee>
<name>李四</name>
<sex>女</sex>
<age>20</age>
</employee>
<employee>
<name>王五</name>
<sex>女</sex>
<age>30</age>
</employee>
<employee>
<name>赵六</name>
<sex>男</sex>
<age>26</age>
</employee>
<employee>
<name>tom</name>
<sex>男</sex>
<age>32</age>
</employee>
</employees>