【转载】C# 中如何实现LINQ查询数据库表信息

声明:本博客转载来源于李天平老师的《项目中的.NET》一书,推荐大家阅读,收获一定是大大的。

LINQ定义了统一的语法,可以从不同的数据源或数据格式中获取数据,从而减少开发人员学习的负担。所有的LINQ查询操作都可以由以下3个不同的操作组成:

【1】获取数据源

【2】创建查询

【3】执行查询

以下我们将各个步骤慢慢分析一下:

using System.Xml.Linq;
using System.Xml;

using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.Data.SqlClient;

△如果数据源是SQL数据库,则第一步要先建立数据库和实例之间的关系映射。第二步为实例对象写查询语句。第三步,LINQ会在运行时保持SQL与实例对象中交互。

        protected void Button4_Click(object sender, EventArgs e)
        {
            //获取数据源
            string connectionString = "data source=VQJREZV7DVSK2QA;Database=codematic;user id=sa;password=admin@123456";
            DataContext db = new DataContext(connectionString);
            Table<Product> prolist = db.GetTable<Product>();

            //创建查询
            var pros = from p in prolist
                       where p.Price > 1
                       orderby p.ID
                       select p;
            //执行查询
            foreach (Product pro in pros)
            {
                Response.Write(pro.Name + "," + pro.Price.ToString() + "<br>");
            }
            //GridView1.DataSource =pros;
        }

△如果数据源是XML文档,则必须将它加工为支持泛型IEnumerable(Of T)接口的对象形式。在.NET FrameWork中,XElement 术语查询类型,将XML文档转化成XElement类型对象即可。

 protected void Button6_Click(object sender, EventArgs e)
        {
            // 获取数据源
            XmlDocument doc = new XmlDocument();
            string path = Server.MapPath("sampledata.xml");
            XElement stulist = XElement.Load(path);


            //创建查询
            var stus = from r in stulist.Elements("学生")
                       where r.Element("性别").Value == "男"
                       orderby r.Element("姓名")
                       select r;

            foreach (XElement node in stus)
            {
                Response.Write(node);
            }

            //foreach (XAttribute att in stulist.Attributes())
            //{
            //    stulist.Add(new XElement(att.Name, (string)att));
            //}
            //stulist.Attributes().Remove();
            //Response.Write(stulist);
        }

△如果采用对象列表进行查询

 protected void Button5_Click(object sender, EventArgs e)
        {
            //获取数据源
            List<Man> manlist = new List<Man>();
            manlist.Add(new Man("李天平", "男"));
            manlist.Add(new Man("李嘉诚", "男"));
            manlist.Add(new Man("徐静蕾", "女"));

            //创建查询
            var mans = from r in manlist
                       where r.Sex == "男"
                       orderby r.Name descending
                       select r;

            //执行查询
            foreach (Man man in mans)
            {
                Response.Write(man.Name + "," + man.Sex + "<br>");
            }
        }

00000000000000000000000000000000000000000000000000000000000000

    /// <summary>
    /// 示例对象
    /// </summary>
    public class Man
    {
        private string name;
        private string sex;
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name
        {
            set { name = value; }
            get { return name; }
        }
        /// <summary>
        /// 性别:男,女
        /// </summary>
        public string Sex
        {
            set { sex = value; }
            get { return sex; }
        }
        public Man(string Name, string Sex)
        {
            name = Name;
            sex = Sex;
        }

    }


    //映射类
    [Table(Name = "P_Product")]//将某个类指定为数据库表相关联的实体类
    public class Product
    {
        [Column(IsPrimaryKey = true)]//将类与数据库表的列相关联
        public int ID { get; set; }

        [Column(Name = "Name")]
        public string Name { get; set; }

        [Column(Name = "Descn")]
        public string Descn { get; set; }

        [Column(Name = "Price")]
        public decimal Price { get; set; }
    }

    public class Student
    {
        private string name;
        private string sex;
        /// <summary>
        /// 姓名
        /// </summary>
        public string Name
        {
            set { name = value; }
            get { return name; }
        }
        /// <summary>
        /// 性别:男,女
        /// </summary>
        public string Sex
        {
            set { sex = value; }
            get { return sex; }
        }
        public Student(string Name, string Sex)
        {
            name = Name;
            sex = Sex;
        }
    }

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C#使用LINQ查询数据库可以通过以下步骤进行: 1. 首先,确保你已经添加了相关的命名空间引用,如System.Data和System.Data.SqlClient。 2. 创建一个数据库连接字符串,该字符串指定了数据库服务器的位置、数据库名称以及身份验证信息。 3. 使用SqlConnection类创建一个数据库连接对象,并传入连接字符串作为参数。 4. 使用SqlCommand类创建一个SQL查询语句,并将该语句作为参数传递给SqlCommand对象。 5. 如果需要参数化查询,可以使用SqlParameter类来添加参数,并将其与查询语句关联起来。 6. 使用SqlDataAdapter类创建一个数据适配器对象,并将其与SqlCommand对象关联起来。 7. 创建一个DataTable对象,用于存储查询结果。 8. 调用数据适配器的Fill方法,并将DataTable对象作为参数传递给该方法,以填充DataTable对象。 9. 使用LINQ查询达式对DataTable对象进行查询。可以使用from、where、orderby等关键字来筛选和排序数据。 10. 使用foreach循环遍历查询结果,并对每个元素执行需要的操作。 下面是一个示例代码,演示了使用LINQ查询数据库的基本步骤: ```csharp string connectionString = "your_connection_string"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); string query = "SELECT * FROM YourTable"; SqlCommand command = new SqlCommand(query, connection); SqlDataAdapter adapter = new SqlDataAdapter(command); DataTable dataTable = new DataTable(); adapter.Fill(dataTable); var results = from row in dataTable.AsEnumerable() where row.Field<string>("ColumnName").Contains("Keyword") orderby row.Field<int>("AnotherColumn") select new { Column1 = row.Field<string>("Column1"), Column2 = row.Field<int>("Column2") }; foreach (var item in results) { Console.WriteLine(item.Column1 + " - " + item.Column2); } } ``` 请注意,上面的代码示例,"your_connection_string"需要替换为你实际的数据库连接字符串,"YourTable"需要替换为你要查询名,"ColumnName"需要替换为实际的列名,"Keyword"需要替换为你要查询的关键词,"AnotherColumn"需要替换为你要排序的列名,"Column1"和"Column2"需要替换为你要选择的列名。 这样,你就可以使用LINQ查询达式对数据库进行查询了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [C# LINQ查询](https://blog.csdn.net/LWR_Shadow/article/details/128700391)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [C#使用LINQ查询达式的基本子句总结](https://download.csdn.net/download/weixin_38614377/12799509)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值