C# LINQ的基本使用方法示例

LINQ是什么?

LINQ是Language Integrated Query(语言集成查询的缩写), 微软官方 对其的描述:

语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称。

基本用法是什么?

(我目前也只会最基本的用法。。)

LINQ查询操作由三个不同的操作组成:

  1. 获取数据源
  2. 创建查询
  3. 执行查询

下面我将用我学习时用的一个小例子来演示。

有两个数据源:武林高手的集合和武林绝学的集合。

我用的是两个集合,实际上不只是集合可以作为数据源

微软官方文档提到:

上例中,数据源是一个数组,因此它隐式支持泛型IEnumerable<T>接口。 这一事实意味着该数据源可以用 LINQ 进行查询。

说回我的例子,我实现了两个类:

MatialArtsMaster 表示武林高手:

//武林高手
class MatialArtsMaster
{
 public int ID { get; set; }
 public string Name { get; set; }
 public int Age { get; set; }
 public string Menpai { get; set; }
 public string Kongfu { get; set; }
 public int Level { get; set; }
 public override string ToString()
 {
  return string.Format("id:{0},name:{1},age:{2},menpai:{3},kongfu:{4},level:{5}", this.ID, this.Name, this.Age, this.Menpai, this.Kongfu, this.Level);
 }
}

Kongfu 表示武林绝学:

//武学
class Kongfu
{
 public int Id { get; set; }
 public string Name { get; set; }
 public int Power { get; set; }
 public Kongfu() { }
 public Kongfu(int id, string name, int power)
 {
  Id = id;
  Name = name;
  Power = power;
 }
 public override string ToString()
 {
  return string.Format("Id:{0},Name:{1},Power:{2}", this.Id, this.Name, this.Power);
 }
}

然后填充两个集合:

{
   var MasterList = new List<MatialArtsMaster>
   {
    new MatialArtsMaster(){ID=001,Name="黄蓉",Age=18,Menpai="丐帮",Kongfu="打狗棒法",Level=9},
    new MatialArtsMaster(){ID=002,Name="洪七公",Age=70,Menpai="丐帮",Kongfu="打狗棒法",Level=10},
    new MatialArtsMaster(){ID=003,Name="郭靖",Age=22,Menpai="丐帮",Kongfu="降龙十八掌",Level=10},
    new MatialArtsMaster(){ID=004,Name="任我行",Age=50,Menpai="明教",Kongfu="葵花宝典",Level=1},
    new MatialArtsMaster(){ID=005,Name="东方不败",Age=35,Menpai="明教",Kongfu="葵花宝典",Level=10},
    new MatialArtsMaster(){ID=006,Name="林平之",Age=23,Menpai="华山",Kongfu="葵花宝典",Level=7},
    new MatialArtsMaster(){ID=007,Name="岳不群",Age=50,Menpai="华山",Kongfu="岳不群",Level=8},
    new MatialArtsMaster(){ID=008,Name="令狐冲",Age=23,Menpai="华山",Kongfu="独孤九剑",Level=10},
    new MatialArtsMaster(){ID=009,Name="梅超风",Age=23,Menpai="梅花岛",Kongfu="九阴真经",Level=8},
   };
   var kungfuList = new List<Kongfu>()
   {
    new Kongfu(){Id=1,Name="打狗棒法",Power=90},
    new Kongfu(){Id=2,Name="降龙十八掌",Power=95},
    new Kongfu(){Id=3,Name="葵花宝典",Power=100},
    new Kongfu(){Id=4,Name="独孤九剑",Power=100},
    new Kongfu(){Id=5,Name="九阴真经",Power=100},
   };

接下来就是查询了,基本的LINQ查询操作主要通过 from , in , select , where 关键字实现。例如:

查询修炼 葵花宝典 的武林高手:

var res = from master in MasterList
     where master.Kongfu == "葵花宝典"
     select master;
  foreach(var temp in res)
  {
   Console.WriteLine(temp.ToString());
  }
  //id: 4,name: 任我行,age: 50,menpai: 明教,kongfu: 葵花宝典,level: 1
  //id: 5,name: 东方不败,age: 35,menpai: 明教,kongfu: 葵花宝典,level: 10
  //id: 6,name: 林平之,age: 23,menpai: 华山,kongfu: 葵花宝典,level: 7

查询所有武林高手的名字:

var res = from master in MasterList
     select master.Name;
  foreach(var temp in res)
  {
   Console.WriteLine(temp.ToString());
  }
  //黄蓉
  //洪七公
  //郭靖
  //任我行
  //东方不败
  //林平之
  //岳不群
  //令狐冲
  //梅超风

微软官方将 from 关键字后的那个变量称为 范围变量 :

范围变量就像 foreach 循环中的迭代变量,但查询表达式中不会真正发生迭代。 当执行查询时,范围变量将充当对 customers 中每个连续的元素的引用。

这种写法写起来和SQL语句十分相似,逻辑功能也基本上一样,所以如果已经会SQL的话会很容易理解。

扩展方法

除了这样的标准写法,还可以通过数据源的扩展方法来实现LINQ查询。最简单易懂的一个方法是 where() 方法。

如要查询所有修炼等级大于8的武林高手:

var res = MasterList.Where(master => master.Level > 8);
  foreach(var temp in res)
  {
   Console.WriteLine(temp.ToString());
  }
  //id: 1,name: 黄蓉,age: 18,menpai: 丐帮,kongfu: 打狗棒法,level: 9
  //id: 2,name: 洪七公,age: 70,menpai: 丐帮,kongfu: 打狗棒法,level: 10
  //id: 3,name: 郭靖,age: 22,menpai: 丐帮,kongfu: 降龙十八掌,level: 10
  //id: 5,name: 东方不败,age: 35,menpai: 明教,kongfu: 葵花宝典,level: 10
  //id: 8,name: 令狐冲,age: 23,menpai: 华山,kongfu: 独孤九剑,level: 10

扩展方法还有很多,如 Select 、 SelectMany 、 Join 和 Orderby 。他们的具体用法可参阅微软官方文档-扩展方法

)。

最后

LINQ是一项强大的技术,我才了解了一点点LINQ的知识(甚至可能还有错误,如果有请一定指正!),保持学习才是长久之道。

总结

到此这篇关于C# LINQ的基本使用方法的文章就介绍到这了,更多相关C# LINQ基本用法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • C#使用linq对数组进行筛选排序的方法

    本文实例讲述了C#使用linq对数组进行筛选排序的方法.分享给大家供大家参考.具体如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace OrderQueryResults { class Program { static void Main(string[] args) { string[] names = {"kaka","kun

  • c#中LINQ的基本用法实例

    一.什么是LINQ LINQ(读音link)代表语言集成查询(Language Integrated Query),是.NEt框架的扩展,它允许我们用SQL查询数据库的方式来查询数据的集合,使用它,你可以从数据库.程序对象的集合以及XML文档中查询数据 下面一个简单的示例,可以查询数组中小于8的数字并输出. 一般步骤:获取数据源.创建查询.执行查询.需要注意的是,尽管查询在语句中定义,但直到最后的foreach语句请求其结果的时候才会执行 using System; using System.C

  • C#操作LINQ to SQL组件进行数据库建模的基本教程

    建立实体类 使用LINQ to SQL时,需要首先建立用于映射数据库对象的模型,也就是实体类.在运行时,LINQ to SQL 根据LINQ表达式或查询运算符生成SQL语句,发送到数据库进行操作.数据库返回后,LINQ to SQL负责将结果转换成实体类对象. 建立实体类的方法有很多,例如LINQ to SQL设计器,手动编码建立,使用XML文件映射,使用命令行工具SqlMetal生成等.其中最方便的就是LINQ to SQL设计器. 1.使用LINQ to SQL设计器建立实体类       

  • C#中的Linq to Xml详解

    前言 我相信很多从事.NET开发的,在.NET 3.5之前操作XML会比较麻烦,但是在此之后出现了Linq to Xml,而今天的主人公就是Linq to Xml,废话不多说,直接进入主题. 一.生成Xml 为了能够在结构有一定的组织,笔者建议大家新建一个控制台项目,并且新建一个CreateXml类(以下部分都属于该类中). 并在其中写入以下属性: 复制代码 代码如下: public static String Path         {             get            

  • C#使用linq语句查询数组中以特定字符开头元素的方法

    本文实例讲述了C#使用linq语句查询数组中以特定字符开头元素的方法.分享给大家供大家参考.具体如下: 下面的代码查询数组中以字母k开头的元素 using System; using System.Collections.Generic; using System.Linq; using System.Text; static void Main(string[] args) { string[] names = {"kaka","kunka","kuma

  • C#中Linq查询基本操作使用实例

    摘要:本文介绍Linq查询基本操作(查询关键字) - from 子句 - where 子句 - select子句 - group 子句 - into 子句 - orderby 子句 - join 子句 - let 子句 - 复合from子句 - 在某些情况下,源序列中的每个元素本身可能是序列(集合),也可能包含序列 - 用语访问单个数据库中的内部集合 - 使用多个from字句执行连接 - 可以包含多个可从独立数据源生成补充查询的from字句 复合(顾名思义就是有多from的字句)实例: 复制代码

  • C# Linq读取XML文件的实例

    1.示例XML文件:Demo.xml 复制代码 代码如下: <?xml version="1.0" encoding="utf-8" ?><note>  <conf>    <to>infozero</to>    <from>lerroy</from>    <heading>测试信息</heading>    <body>第一条测试信息<

  • C#中的Linq Intersect与Except方法使用实例

    实例描述 现有某班学生的两份成绩,两份成绩中存在一些不一致的记录.需借助于编程方法找出这些不一致的记录. 实例代码 using System; using System.Collections.Generic; using System.Linq; namespace IntersectAndExceptExp { class Program { static void Main(string[] args) { List<Student> studentList1 = newList<

  • C#使用LINQ查询表达式的基本子句总结

    LINQ查询表达式的基本语法很容易掌握,它使用C#常见的语言构造,从外观上看,和我们常用的SQL类似,并且查询表达式中的变量可以用匿名类型,所以在很多情况下,不需要指定变量类型就可以构建LINQ表达式. LINQ的数据源可以是数据库对象或是XML流等,也可以使实现了IEnumerable或者泛型IEnumberable<T>接口的集合对象. LINQ的基本语法包含如下的8个上下文关键字,这些关键字和具体的说明如下: 关键字 说明 from 指定范围变量和数据源 where 根据bool表达式从

  • C# linq查询之动态OrderBy用法实例

    本文实例讲述了C# linq查询之动态OrderBy用法.分享给大家供大家参考.具体分析如下: groupList是原始数据集合,List<T> sortOrder是排序类型,desc 或者asc sortName是排序属性名称 1.使用反射. private static object GetPropertyValue(object obj, string property) { System.Reflection.PropertyInfo propertyInfo = obj.GetTyp

随机推荐