LINQ的使用

本文介绍了LINQ的不同方面,包括LINQ to DataSet从Oracle数据库查询数据、LINQ to Objects操作内存中数据、LINQ to XML处理XML文件等。通过具体实例展示了如何使用这些技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 提供了修改文档对象模型的内存文档。

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文件,最后一条数据是通过程序添加进去的,前四条是事先创建好的数据。
<?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>

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值