西西軟件下載最安全的下載網(wǎng)站、值得信賴的軟件下載站!

首頁編程開發(fā)C#.NET → 學(xué)習(xí)LINQ幾個(gè)主要操作實(shí)例代碼分享

學(xué)習(xí)LINQ幾個(gè)主要操作實(shí)例代碼分享

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來源:西西整理時(shí)間:2013/1/22 9:15:40字體大。A-A+

作者:西西點(diǎn)擊:60次評(píng)論:1次標(biāo)簽: LINQ

  • 類型:數(shù)據(jù)庫類大小:1.7M語言:英文 評(píng)分:5.0
  • 標(biāo)簽:
立即下載

先把準(zhǔn)備工作做好,這步可以不看,創(chuàng)建一個(gè)數(shù)據(jù)庫和兩張表,下面是創(chuàng)建語句,很簡(jiǎn)單,大家都看得懂.

第一步:創(chuàng)建表和初始化數(shù)據(jù)


--創(chuàng)建數(shù)據(jù)庫Student
create database Student
go
use Student
--創(chuàng)建數(shù)據(jù)表T_Student
create table T_Student(
ID int not null identity primary key,
Name varchar(20) not null,
EnglishName varchar(20) not null,
Age int,
Birthday date,
Country varchar(50)
)
--創(chuàng)建數(shù)據(jù)表T_Score,設(shè)置主外鍵關(guān)系
create table T_Score(
ID int not null identity primary key,
StudentID int not null foreign key references T_Student(ID),
English varchar(20) not null,
Math varchar(20) not null,
Chinese varchar(20) not null
)
go

--向T_Student插入數(shù)據(jù)
insert into T_Student
select '李正興','Black_Li',19,'1991-03-17','江蘇鹽城'
union
select '羅海','Jason',21,'1991-10-17','江蘇南京'
union
select '張士陽','Huk',35,'1991-12-18','安徽阜陽'
union
select '呂佳惠','Lily',23,'1991-06-23','四川'
union
select '金琢','Babylon',23,'1991-03-15','江蘇揚(yáng)州'

--向T_Score插入數(shù)據(jù)
insert into T_Score
select 1,'90','84','68'
union
select 2,'87','78','78'
union
select 3,'79','87','88'
union
select 4,'95','84','89'
union
select 5,'90','84','58'
go

學(xué)生表:成績(jī)表:



第二步:創(chuàng)建兩張表對(duì)應(yīng)的實(shí)體


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LinqDemo
{
    /// <summary>
    /// 學(xué)生實(shí)體類
    /// </summary>
    public class Student
    {
        #region 屬性
        public int ID { get; set; }
        public string Name { get; set; }
        public string EnglishName { get; set; }
        public int Age { get; set; }
        public DateTime Birthday { get; set; }
        public string Country { get; set; }
        #endregion

        #region 方法
        /// <summary>
        /// 重寫Object類的ToString()方法
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return string.Format("學(xué)號(hào):{0},姓名:{1},英文名:{2},年齡:{3},生日:{4},家鄉(xiāng):{5}",
                this.ID,
                this.Name,
                this.EnglishName,
                this.Age,
                this.Birthday,
                this.Country);
        }
        #endregion
    }
}




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LinqDemo
{
    /// <summary>
    /// 成績(jī)表實(shí)體
    /// </summary>
    public class Score
    {
        #region 屬性
        public int ID { get; set; }
        public int StudentID { get; set; }
        public string English { get; set; }
        public string Math { get; set; }
        public string Chinese { get; set; }
        #endregion

        #region 方法
        /// <summary>
        /// 重寫Object類的ToString()方法
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return string.Format("學(xué)號(hào):{0},英語:{1},數(shù)學(xué):{2},語文:{3}",
                this.StudentID,
                this.English,
                this.Math,
                this.Chinese);
        }
        #endregion
    }
}



第三步:創(chuàng)建學(xué)生管理類(其中用到了自己寫的SQLHelper,也貼出來)


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace LinqDemo
{
    /// <summary>
    /// 學(xué)生管理類
    /// </summary>
    public class StudentManage
    {
        private string commandText = string.Empty;
        DataTable table = null;
        /// <summary>
        /// 獲取所有學(xué)生信息
        /// </summary>
        /// <returns></returns>
        public List<Student> GetAllStudents()
        {
            //創(chuàng)建一個(gè)集合
            List<Student> list = new List<Student>();
            commandText = @"SELECT [ID]
                                  ,[Name]
                                  ,[EnglishName]
                                  ,[Age]
                                  ,[Birthday]
                                  ,[Country]
                                FROM [Student].[dbo].[T_Student]";
            //執(zhí)行Sql語句,查出所有的學(xué)生信息
            table = SQLHelper.ExecuteDataTable(commandText);

            //遍歷添加到list集合中
            for (int i = 0; i < table.Rows.Count; i++)
            {
                list.Add(new Student()
                {
                    ID = Convert.ToInt32(table.Rows[i]["ID"]),
                    Name = table.Rows[i]["Name"].ToString(),
                    EnglishName = table.Rows[i]["EnglishName"].ToString(),
                    Age = Convert.ToInt32(table.Rows[i]["Age"]),
                    Birthday = Convert.ToDateTime(table.Rows[i]["Birthday"]),
                    Country = table.Rows[i]["Country"].ToString()
                });
            }
            return list;
        }
        /// <summary>
        /// 獲取所有成績(jī)信息
        /// </summary>
        /// <returns></returns>
        public List<Score> GetAllScores()
        {
            //創(chuàng)建一個(gè)集合
            List<Score> list = new List<Score>();
            commandText = @"SELECT [ID],
                                [StudentID],
                                [English],
                                [Math],
                                [Chinese]
                              FROM [Student].[dbo].[T_Score]";
            //執(zhí)行Sql語句,查出所有的學(xué)生信息
            table = SQLHelper.ExecuteDataTable(commandText);

            //遍歷添加到list集合中
            for (int i = 0; i < table.Rows.Count; i++)
            {
                list.Add(new Score()
                {
                    ID = Convert.ToInt32(table.Rows[i]["ID"]),
                    StudentID = Convert.ToInt32(table.Rows[i]["StudentID"]),
                    English = table.Rows[i]["English"].ToString(),
                    Math = table.Rows[i]["Math"].ToString(),
                    Chinese = table.Rows[i]["Chinese"].ToString()
                });
            }
            return list;
        }
    }
}




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace LinqDemo
{
    /// <summary>
    /// 后臺(tái)數(shù)據(jù)執(zhí)行類
    /// </summary>
    public class SQLHelper
    {
        #region  ExecuteNonQuery()方法 返回一個(gè)int值
        /// <summary>
        /// 執(zhí)行ExecuteNonQuery并返回結(jié)果,靜態(tài)函數(shù)可由類SQLHelper直接調(diào)用
        /// </summary>
        /// <param name="commandText">sql語句命令</param>
        /// <param name="parameters">用戶傳過來的參數(shù)集合</param>
        /// <returns>返回一個(gè)int值</returns>
        public static int ExecuteNonQuery(string commandText, params SqlParameter[] parameters)
        {
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;//建立連接字符串

            using (SqlConnection conn = new SqlConnection(connStr))//創(chuàng)建一個(gè)連接
            {
                conn.Open();//打開連接

                using (SqlCommand cmd = conn.CreateCommand())//創(chuàng)建命令
                {
                    cmd.CommandText = commandText;//sql命令是用戶傳過來的命令
                    //遍歷傳過來的參數(shù)
                    foreach (SqlParameter p in parameters)
                    {
                        cmd.Parameters.Add(p);
                    }
                    return cmd.ExecuteNonQuery();//執(zhí)行命令,并返回執(zhí)行結(jié)果
                }
            }
        }
        #endregion

        #region  ExecuteScalar()方法 返回一個(gè)object值
        /// <summary>
        /// 執(zhí)行ExecuteScalar并返回結(jié)果,靜態(tài)函數(shù)可由類SQLHelper直接調(diào)用
        /// </summary>
        /// <param name="commandText">sql語句命令</param>
        /// <param name="parameters">用戶傳過來的參數(shù)集合</param>
        /// <returns>返回一個(gè)object值</returns>

        /* 舉例:cmd.CommandText = "SELECT COUNT(*) FROM T_Persons";
              Int32 count = (Int32)cmd.ExecuteScalar();
         執(zhí)行查詢,并返回查詢所返回的結(jié)果集中第一行的第一列。忽略其他列或行。
         */

        public static object ExecuteScalar(string commandText, params SqlParameter[] parameters)
        {
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;//建立連接字符串

            using (SqlConnection conn = new SqlConnection(connStr))//創(chuàng)建一個(gè)連接
            {
                conn.Open();//打開連接

                using (SqlCommand cmd = conn.CreateCommand())//創(chuàng)建命令
                {
                    cmd.CommandText = commandText;//sql命令是用戶傳過來的命令
                    //遍歷傳過來的參數(shù)
                    foreach (SqlParameter p in parameters)
                    {
                        cmd.Parameters.Add(p);
                    }
                    return cmd.ExecuteScalar();//執(zhí)行命令,并返回執(zhí)行結(jié)果
                }
            }
        }

        #endregion

        #region  ExecuteDataTable()方法 返回一個(gè)DataTable值
        /// <summary>
        /// 執(zhí)行ExecuteDataTable并返回結(jié)果,靜態(tài)函數(shù)可由類SQLHelper直接調(diào)用
        /// </summary>
        /// <param name="commandText">sql語句命令</param>
        /// <param name="parameters">用戶傳過來的參數(shù)集合</param>
        /// <returns>返回一個(gè)DataTable值</returns>

        public static DataTable ExecuteDataTable(string commandText, params SqlParameter[] parameters)
        {
            string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;//建立連接字符串

            using (SqlConnection conn = new SqlConnection(connStr))//創(chuàng)建一個(gè)連接
            {
                conn.Open();//打開連接

                using (SqlCommand cmd = conn.CreateCommand())//創(chuàng)建命令
                {
                    cmd.CommandText = commandText;//sql命令是用戶傳過來的命令

                    DataSet dataset = new DataSet();//新建一個(gè)數(shù)據(jù)集,把查詢數(shù)據(jù)保存到本地?cái)?shù)據(jù)集中

                    SqlDataAdapter adapter = new SqlDataAdapter(cmd);//創(chuàng)建一個(gè)適配器adapter

                    //遍歷傳過來的參數(shù)
                    foreach (SqlParameter p in parameters)
                    {
                        cmd.Parameters.Add(p);
                    }

                    adapter.Fill(dataset);//向數(shù)據(jù)集中填充數(shù)據(jù)

                    DataTable table = dataset.Tables[0];//將dataset中的查詢結(jié)果(一般第一個(gè)表)保存起來


                    return table;//執(zhí)行命令,并返回執(zhí)行結(jié)果
                }
            }
        }

        #endregion



    }
}



第四步:LINQ開始,在Program.cs類中


        static void Main(string[] args)
        {
            DoWork();
            Console.ReadKey();
        }
        /// <summary>
        /// 做某些操作函數(shù)
        /// </summary>
        static void DoWork()
        {
            //創(chuàng)建學(xué)生管理對(duì)象
            StudentManage SM = new StudentManage();
            //獲取所有學(xué)生存放于集合students中
            List<Student> students = SM.GetAllStudents();
            //獲取所有成績(jī)存放于集合scores中
            List<Score> scores = SM.GetAllScores();      
        }



A、查詢


            //查詢語句,將所有學(xué)生姓名取出來放入集合中
            //IEnumerable<string> names = students.Select(s=>s.Name);
            //或者
            IEnumerable<string> names = from s in students select s.Name;
            foreach (string name in names)
            {
                Console.WriteLine(name);
            } 
結(jié)果:




            var stus = students.Select(s=>new { Name = s.Name, Age = s.Age });
            //或者
            //var stus = from s in students select new { Name = s.Name, Age = s.Age };
            foreach (var s in stus)
            {
                Console.WriteLine(s);
            }
結(jié)果:



B、篩選


            //篩選語句,將符合條件的學(xué)生姓名取出來
            //IEnumerable<Student> stus = students.Where(stu => string.Equals(stu.Country,"四川")).Select(stu=>stu);
            //或者
            IEnumerable<Student> stus = from stu in students where string.Equals(stu.Country, "四川") select stu;
            foreach (Student stu in stus)
            {
                Console.WriteLine(stu.ToString());
            }
結(jié)果:



C、排序


            //根據(jù)學(xué)號(hào)降序,默認(rèn)升序
            //var stus = students.OrderByDescending(stu => stu.ID).Select(stu => new {Number=stu.ID,Name=stu.Name});
            //或者
            var stus = from stu in students orderby stu.ID descending select new { Number = stu.ID, Name = stu.Name };
            foreach (var stu in stus)
            {
                Console.WriteLine(stu);
            }
結(jié)果:



D、分組


            //根據(jù)年齡分組
            //var stusGroup = students.GroupBy(stu=>stu.Age);
            //或者
            var stusGroup = from stu in students group stu by stu.Age;
            //遍歷組信息
            foreach (var grop in stusGroup)
            {
                Console.WriteLine("這是年齡為"+grop.Key+"組");
                Console.WriteLine("該組成員如下:");
                //遍歷組成員信息
                foreach(var stu in grop)
                {
                    Console.WriteLine("姓名:"+stu.Name+" 年齡:"+stu.Age);
                }
                Console.WriteLine();
            }
結(jié)果:



E、結(jié)果集去除重復(fù)與計(jì)數(shù)


            //取出所有年齡,過濾掉重復(fù),統(tǒng)計(jì)個(gè)數(shù)
            int number = students.Select(stu => stu.Age).Distinct().Count();



F、聯(lián)合查詢


            //創(chuàng)建學(xué)生管理對(duì)象
            StudentManage SM = new StudentManage();
            //獲取所有學(xué)生存放于集合students中
            List<Student> students = SM.GetAllStudents();
            //獲取所有成績(jī)存放于集合scores中
            List<Score> scores = SM.GetAllScores();
            //聯(lián)合學(xué)生和成績(jī)表
            //var StuScores = students.Select(stu => stu).Join
        (scores, stus => stus.ID, scors => scors.StudentID, (stus, scors) => 
        new {stus.Name,stus.Age,scors.Chinese,scors.English});
            //輸出
            //或者
            var StuScores = from stu in students join score in scores 
       on stu.ID equals score.StudentID 
       select new { stu.Name, stu.Age, score.Chinese, score.English };
            foreach (var stuscore in StuScores)
            {
                Console.WriteLine(stuscore);
            }
結(jié)果:


    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(1)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)