C# LINQ 表达式 ,查询, 筛选

   语言集成查询 (LINQ) 是一组技术的名称,这些技术建立在将查询功能直接集成到 C# 语言(以及 Visual Basic 
和可能的任何其他 .NET 语言)的基础上。 借助于 LINQ,查询现在已是高级语言构造,就如同类、方法、事件等等。 
对于编写查询的开发人员来说,LINQ 最明显的“语言集成”部分是查询表达式。 
查询表达式是使用 C# 3.0 中引入的声明性查询语法编写的。 
通过使用查询语法,您甚至可以使用最少的代码对数据源执行复杂的筛选、排序和分组操作。 
您使用相同的基本查询表达式模式来查询和转换 SQL 数据库、ADO.NET 数据集、XML 文档和流以及 .NET 集合中的数据。

LINQ的基本格式如下所示:
var <变量> = from <项目> in <数据源> where <表达式> orderby <表达式>

group分组子句
语句格式:var str = from p in PersonList group p by p.age
group子句将数据源中的数据进行分组,在遍历数据元素时,并不像前面的章节那样直接对元素进行遍历,因为group子句返回的是元素类型为IGrouping<TKey,TElement>的对象序列,必须在循环中嵌套一个对象的循环才能够查询相应的数据元素。
在使用group子句时,LINQ查询子句的末尾并没有select子句,因为group子句会返回一个对象序列,通过循环遍历才能够在对象序列中寻找到相应的对象的元素,如果使用group子句进行分组操作,可以不使用select子句。

orderby排序子句
语句格式:var str = from p in PersonList orderby p.age select p;
orderby子句中使用descending关键字进行倒序排列
示例代码如下:
var str = from p in PersonList orderby p.age descending select p;   
orderby子句同样能够进行多个条件排序,只需要将这些条件用“,”号分割即可
示例代码如下:
var str = from p in PersonList orderby p.age descending,p.name select p;

join连接子句
在LINQ中同样也可以使用join子句对有关系的数据源或数据对象进行查询,但首先这两个数据源必须要有一定的联系
var str = from p in PersonList join car in CarList on p.cid equals car.cid select p;

1,数组 或者list的筛选

   public int[] scores = { 90, 92, 42, 100,46, 37, 32,70, 74, 5, 16, 32 };

        IEnumerable<int> scoreQuery =
                from score in scores     //必须
                where score > 40           //可选条件  筛选 分数大于 40
                orderby score descending //可选条件
                select score;            //必须

            foreach (int score in scoreQuery)
            {
                richTextBox_after.AppendText(score.ToString());

                richTextBox_after.AppendText("\r\n");
            }

            int hightestScore = scores.Max();

            richTextBox_after.AppendText("最大值:" + hightestScore.ToString());

2,字典 筛选

 public Dictionary<string, int> stutents = new Dictionary<string, int>()
        {
            {"lisi",12 },
            {"zhansan",20 },
            {"wangwu",90 },
            {"laowang",35 }
        };


            var age = from student in stutents
                      where student.Value > 30         //查找值大于 30 的
                      orderby student.Value ascending  //升序   
                      select student.Value;            //选择 value

            var list = age.ToList<int>();  //转为 list类型

            foreach (var student in list)
            {
                richTextBox_after.AppendText(student.ToString());
                richTextBox_after.AppendText("\r\n");
            }

3,类,对象 筛选

    public class Animal
        {
            public string ID;
            public string type;
            public string area;
            public string name;
            public int age;
            public string sex;

            public string ToString()
            {
                return $"ID :{ID} type:{type}  area:{area}  name:{name} age:{age} sex:{sex}";
            }
        }

        private List<Animal> _monkey;

    _monkey = new List<Animal>();
            Animal m1 = new Animal()
            {
                ID = "1001",
                type = "金丝猴",
                area = "云南",
                name = "小金",
                age = 8,
                sex = "male"
            };
            Animal m2 = new Animal()
            {
                ID = "1002",
                type = "黒叶猴",
                area = "贵州",
                name = "小黑",
                age = 2,
                sex = "woman"
            };
            Animal m3 = new Animal()
            {
                ID = "1003",
                type = "猩猩",
                area = "非洲",
                name = "小猩",
                age = 12,
                sex = "woman"
            };

            Animal m4 = new Animal()
            {
                ID = "1004",
                type = "狒狒",
                area = "南美",
                name = "小狒",
                age = 15,
                sex = "man"
            };

            Animal m5 = new Animal()
            {
                ID = "1005",
                type = "飞猴",
                area = "广西",
                name = "小飞",
                age = 6,
                sex = "man"
            };

            _monkey.Add(m1);
            _monkey.Add(m2);
            _monkey.Add(m3);
            _monkey.Add(m4);
            _monkey.Add(m5);

 

           var seletData = from monkey in _monkey
                            where monkey.age > 5           //选择年龄大于 5 的 monkey
                            orderby monkey.age descending   //年龄降序
                            select monkey;

            var list = seletData.ToList<Animal>();

            foreach (var animal in list)
            {
                richTextBox_after.AppendText(animal.ToString());
                richTextBox_after.AppendText("\r\n");
            }

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值