LINQ之Select/Distinct/Count/Sum/Min/Max/Avg/LIKE

说明 :和SQL命令中的select作用相似但位置不同,查询表达式中的select及所接子句是放在表达式最后并把子句中的变量也就是结果返回回来;延迟。

Select/Distinct操作包括9种形式,分别为简单形式、匿名类型形式、带条件形式、指定类型形式、过滤类型形式、shaped类型形式、嵌套类型形式、LocalMethodCall形式、Distinct形式。

1.简单形式:

var
 q =
  from
 c in
 db.Customers
  select
 c.ContactName;

注意:这个语句只是一个声明或者一个描述,并没有真正把数据取出来,只有当你需要该数据的时候,它才会执行这个语句,这就是延迟加载 (deferred loading)。如果,在声明的时候就返回的结果集是对象的集合。你可以使用ToList() 或ToArray()方法把查询结果先进行保存,然后再对这个集合进行查询。当然延迟加载(deferred loading)可以像拼接SQL语句那样拼接查询语法,再执行它。

2.匿名类型形式:

说明:匿名类型是C# 3.0中新特性。其实质是编译器根据我们自定义自动产生一个匿名的类来帮助我们实现临时变量的储存。匿名类型还依赖于另外一个特性:支持根据 property来创建对象。比如,var d = new { Name = "400电话 " };编译器自动产生一个有property叫做Name的匿名类,然后按这个类型分配内存,并初始化对象。但是var d = new {"400电话 "};是编译不通过的。因为,编译器不知道匿名类中的property的名字。例如string c = "http://www.my400800.cn ";var d = new { c}; 则是可以通过编译的。编译器会创建一个叫做匿名类带有叫c的property。
例如下例:new{c,ContactName,c.Phone};ContactName和Phone都是在映射文件中定义与表中字段相对应的 property。编译器读取数据并创建对象时,会创建一个匿名类,这个类有两个属性,为ContactName和Phone,然后根据数据初始化对象。 另外编译器还可以重命名property的名字。

var
 q =
      from
 c in
 db.Customers
      select
 new
 {c.ContactName, c.Phone};

语句描述:查询顾客的联系人和电话。

var
 q =
      from
 e in
 db.Employees
      select
 new
 {Name = e.FirstName + " "
 + e.LastName, Phone = e.HomePhone};

语句描述:查询职员的姓名和家庭电话

var
 q =
      from
 p in
 db.Products
      select
 new
 {p.ProductID, HalfPrice = p.UnitPrice / 2};

3.带条件形式:

说明:生成SQL语句为:case when condition then else。

var
 q =
      from
 p in
 db.Products
      select
 new
 {p.ProductName, Availability = p.UnitsInStock - p.UnitsOnOrder < 0 ? "Out Of Stock"
: "In Stock"
};

4.指定类型形式:

说明:该形式返回你自定义类型的对象集。

var
 q =
      from
 e in
 db.Employees
      select
 new
 Name
 {FirstName = e.FirstName, LastName = e.LastName};

5.过滤类型形式:

说明:结合where使用,起到过滤作用。

var
 q =
      from
 c in
 db.Customers
      where
 c.City == "London"

      select
 c.ContactName;

6.shaped类型形式:

说明:其select操作使用了匿名对象,而这个匿名对象中,其属性也是个匿名对象。

var
 q =
      from
 c in
 db.Customers
      select
 new
 {
        c.CustomerID,
        CompanyInfo = new
 {c.CompanyName, c.City, c.Country},
        ContactInfo = new
 {c.ContactName, c.ContactTitle}
    };

语句描述:查询顾客的ID和公司信息(公司名称,城市,国家)以及联系信息(联系人和职位)。

7.嵌套类型形式:

说明:返回的对象集中的每个对象DiscountedProducts属性中,又包含一个集合。也就是每个对象也是一个集合类。

var
 q =
      from
 o in
 db.Orders
      select
 new
 {
        o.OrderID,
        DiscountedProducts =
          from
 od in
 o.OrderDetails
          where
 od.Discount > 0.0
          select
 od,
        FreeShippingDiscount = o.Freight
    };

8.LocalMethodCall形式:

var
 q = from
 c in
 db.Customers
      where
 c.Country == "UK"
 || c.Country == "USA"

      select
 new
 { c.CustomerID, c.CompanyName, Phone = c.Phone, InternationalPhone =

PhoneNumberConverter(c.Country, c.Phone) };

 

XDocument
 doc = new
 XDocument
(
      new
 XElement
("Customers"
, from
 c in
 db.Customers
                where
 c.Country == "UK"
 || c.Country == "USA"

                select
 (new
 XElement
("Customer"
,
                  new
 XAttribute
("CustomerID"
, c.CustomerID),
                  new
 XAttribute
("CompanyName"
, c.CompanyName),
                  new
 XAttribute
("InterationalPhone"
, PhoneNumberConverter(c.Country, c.Phone))
                  ))));

9.Distinct形式:

说明:筛选字段中不相同的值。用于查询不重复的结果集。生成SQL语句为:SELECT DISTINCT [City] FROM [Customers]

var
 q = (
      from
 c in
 db.Customers
      select
 c.City )
      .Distinct();

语句描述:查询顾客覆盖的国家。

Count/Sum/Min/Max/Avg操作符

 

适用场景 :统计数据吧,比如统计一些数据的个数,求和,最小值,最大值,平均数。

Count

说明 :返回集合中的元素个数,返回INT类型;不延迟。生成SQL语句为:SELECT COUNT(*) FROM

1.简单形式:

var
 q = db.Customers.Count();

2.带条件形式:

var
 q = db.Products.Count(p => !p.Discontinued);

LongCount

说明 :返回集合中的元素个数,返回LONG类型;不延迟。对于元素个数较多的集合可视情况可以选用LongCount来统计元素个数,它返回long类型,比较精确。生成SQL语句为:SELECT COUNT_BIG(*) FROM

var
 q = db.Customers.LongCount();

Sum

说明 :返回集合中数值类型元素之和,集合应为INT类型集合;不延迟。生成SQL语句为:SELECT SUM(…) FROM

1.简单形式:

var
 q = db.Orders.Select(o => o.Freight).Sum();

2.映射形式:

var
 q = db.Products.Sum(p => p.UnitsOnOrder);

Min

说明 :返回集合中元素的最小值;不延迟。生成SQL语句为:SELECT MIN(…) FROM

1.简单形式:

var
 q = db.Products.Select(p => p.UnitPrice).Min();

2.映射形式:

var
 q = db.Orders.Min(o => o.Freight);

3.原理:

var
 categories =
      from
 p in
 db.Products
      group
 p by
 p.CategoryID into
 g
      select
 new
 {
           CategoryID = g.Key,
           CheapestProducts =
               from
 p2 in
 g
               where
 p2.UnitPrice == g.Min(p3 => p3.UnitPrice)
               select
 p2
      };

 

 

Max

说明 :返回集合中元素的最大值;不延迟。生成SQL语句为:SELECT MAX(…) FROM

1.简单形式:

var
 q = db.Employees.Select(e => e.HireDate).Max();

2.映射形式:

var
 q = db.Products.Max(p => p.UnitsInStock);

3.原理:

var
 categories =
      from
 p in
 db.Products
      group
 p by
 p.CategoryID into
 g
      select
 new
 {
           g.Key,
           MostExpensiveProducts =
               from
 p2 in
 g
               where
 p2.UnitPrice == g.Max(p3 => p3.UnitPrice)
               select
 p2
      };

Average

说明 :返回集合中的数值类型元素的平均值。集合应为数字类型集合,其返回值类型为double;不延迟。生成SQL语句为:SELECT AVG(…) FROM

1.简单形式:

var
 q = db.Orders.Select(o => o.Freight).Average();

2.映射形式:

var
 q = db.Products.Average(p => p.UnitPrice);

3.原理:

var
 categories =
      from
 p in
 db.Products
      group
 p by
 p.CategoryID into
 g
      select
 new
 {
           g.Key,
           ExpensiveProducts =
               from
 p2 in
 g
               where
 p2.UnitPrice > g.Average(p3 => p3.UnitPrice)
               select
 p2
      };

Aggregate

说明 :根据输入的表达式获取聚合值;不延迟。即是说:用一个种子值与当前元素通过指定的函数来进行对比来遍历集合中的元素,符合条件的元素保留下来。如果没有指定种子值的话,种子值默认为集合的第一个元素。

下面用一个表格总结一下这篇说的LINQ语句

 

Where过滤;延迟
Select选择;延迟
Distinct查询不重复的结果集;延迟
Count返回集合中的元素个数,返回INT类型;不延迟
LongCount返回集合中的元素个数,返回LONG类型;不延迟
Sum返回集合中数值类型元素之和,集合应为INT类型集合;不延迟
Min返回集合中元素的最小值;不延迟
Max返回集合中元素的最大值;不延迟
Average返回集合中的数值类型元素的平均值。集合应为数字类型集合,其返回值类型为double;不延迟
Aggregate根据输入的表达式获取聚合值;不延迟

 

不建议用SqlMethods.Like...此 API 支持 .NET Framework 基础结构,不适合在代码中直接使用...
C# code

       
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> var q = from c in db.Customers where c.CustomerID.Contains( " C " ) select c;

or
C# code

       
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> var q = from c in db.Customers where c.CustomerID.IndexOf( " C " ) >- 1 select c;
不建议用SqlMethods.Like...此 API 支持 .NET Framework 基础结构,不适合在代码中直接使用...
C# code

       
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> var q = from c in db.Customers where c.CustomerID.Contains( " C " ) select c;

or
C# code

       
<!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> var q = from c in db.Customers where c.CustomerID.IndexOf( " C " ) >- 1 select c;

 

不建议用SqlMethods.Like...此 API 支持 .NET Framework 基础结构,不适合在代码中直接使用...

C# codevar q = from c in db.Customers 
where c.CustomerID.Contains("C")
select c;

or

C# codevar q = from c in db.Customers 
where c.CustomerID.IndexOf("C")>-1
select c;
 

 

1.Using String.StartsWith or String.Endswith

C# codevar query = from c in ctx.Customers

            where c.City.StartsWith("Lo")

            select c;

2.Using SqlMethods.Like method

C# codevar query = from c in ctx.Customers

            where SqlMethods.Like(c.City, "L_n%")

            select c;

 

掌握LINQ:查询、排序与分组的艺术 本文深入探讨了LINQ的高级查询技巧,包括使用lambda表达式进行求和以避免溢出、利用Distinct()方法获取唯一数据,以及如何通过多个字段对结果进行排序和分组。文章通过具体的代码示例和详细的解释,展示了LINQ在数据处理中的强大功能和灵活性。 阅读详情

相关推荐

BurpSuite+安卓模拟器双保险:避开真机抓包限制的完整配置指南

本文详细介绍了如何通过BurpSuite与安卓模拟器(如雷电、夜神)协同工作,绕过真机抓包限制的完整配置指南。从环境准备、网络拓扑配置到证书部署和流量分析,提供了一套高效的解决方案,帮助安全测试人员稳定捕获手机数据包,提升测试效率。

Apple的专栏 439

[转]LINQ体验(5)——LINQ语句之Select/Distinct和Count/Sum/Min/Max/Avg

在上一篇讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects、LINQ to DataSets、LINQ to SQL、LINQ to Entities、LINQ to XML,但是相对来说LINQ to SQL在我们程序中使用最多,毕竟所有的数据都要在数据库运行着各种操作。所以先来学习LINQ

菩提树下的杨过 939

项目回顾一:《高速多端口共享缓存模块》

本帖子仅为了回顾一下一年前自己动手完成的第一个数字ic设计项目的历程,为复试做一下准备,完成的这个sramc模块花了整整四个月的时间,从0到12个模块的代码产出以及模块的验证,虽然没有拿奖,也没有进入复赛,设计过程中使用的技术手段和算法也不太成熟,但这这是一个值得记录的过程!

weixin_60261760的博客 1255

LINQ语句之Select/Distinct和Count/Sum/Min/Max/Avg

Select/Distinct操作符适用场景 :o(∩_∩)o… 查询呗。说明 :和SQL命令中的select作用相似但位置不同,查询表达式中的select及所接子句是放在表达式最后并把子句中的变量也就是结果返回回来;延迟。Select/Distinct操作包括9种形式,分别为简单形式、匿名类型形式、带条件形式、指定类型形式、过滤类型形式、shaped类型形式、嵌套类型形式、LocalMethodCall形式、Distinct形式。1.简单形式:var q =   from c in db

超越梦想... 1009

用Docker部署ERPNext V15:从架构原理到生产落地的完整指南

容器化部署正在重塑企业级应用的分发与运维方式,ERPNext作为开源ERP中的佼佼者,其基于Frappe框架的模块化设计天然适合用Docker进行编排。理解容器、镜像与编排的关系,是掌握ERP系统部署的基础。Frappe框架负责数据模型与API,ERPNext则承载销售、采购、财务等业务逻辑,两者通过Docker容器解耦为可独立扩展的组件。这种架构带来的价值在于:环境一致性、快速迁移与弹性伸缩,使中小团队也能以较低成本自托管业务系统。无论是替代传统SaaS,还是构建内部管理平台,掌握容器化部署已成为运维与开

weixin_32325225的博客 138

S32K144 ADC硬件触发实战:PDB模块配置与DMA传输全流程解析

本文详细解析了S32K144微控制器中ADC硬件触发的全流程实现。通过配置PDB模块产生精确的定时触发信号,并联动DMA实现转换数据的自动搬运,构建了一个无需CPU干预的高效、低抖动数据采集系统。文章深入讲解了时钟配置、模块初始化、DMA引擎搭建及实战调试技巧,为汽车电子和工业控制应用提供了可靠的解决方案。

weixin_29174141的博客 226

C# Linq 源码分析之Distinct方法

C# Linq 源码分析之Distinct方法

weixin_43263355的博客 6223

基于Simulink的柔性关节人形机器人振动抑制控制仿真

本文完成了基于Simulink的柔性关节人形机器人振动抑制控制仿真,实现了:✅ 建立二质量柔性关节动力学模型✅ 设计加速度反馈主动阻尼控制器✅ 对比陷波滤波与状态反馈效果✅ 验证大幅运动下的快速振动衰减能力✅ 为高动态人形机器人操作(如击掌、搬运)提供平滑执行基础。

xiaoheshang_123的博客 131

C# LINQ函数的用法

LINQ 函数 一、 查询过滤:where() where() 的参数是用于过滤的条件,要求条件必须返回bool 例: var news = new[] { new {Name=&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;张三&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;quot;,Age=19,

minyi0703的博客 2292

PCL 点云八叉树射线相交

PCL 点云八叉树射线相交

dayuhaitang1的博客 850

x2-DFD:A framework for explainable and explainable deepfake detection

该文章提出了X2-DFD框架,用于可解释和可扩展的深度伪造检测。通过评估大型多模态语言模型(MLLMs)在深度伪造检测中的内在能力,发现它们在不同伪造相关特征上的有效性各异。基于此,实施了针对性的微调策略,显著提高了MLLMs的解释能力,并整合了外部深度伪造检测器(EDDs),以结合MLLMs和传统检测器的互补优势,实现更好的检测和解释。

志在山顶的人,不会贪念山腰的风景 510

LINQ需要select多个值时怎么办?

LINQ需要在一次执行中select多项数据,特别是join连接多个表之后需要在不同表内各选几项数据。 只需要两步: 一、新建一个类,并定义好其成员,比如: public class third { public string LessonName { get; set; } public string TeacherEmployeeID { get;

李豆豆的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SQL-LINQ-Lambda 语法对照

SQL LINQ Lambda SELECT *FROM Employees from e in Employees select e Employees .Select (e => e) SELECT e.LoginID,e.JobTitle FROM EmployeesAS e fro...

anglong7701的博客 114

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

SQL、Linq、lamda表达式 同一功能不同写法

SQL LINQ Lambda SELECT * FROM HumanResources.Employee from e in Employees select e Employees .Select (e => e) ...

diy19238的博客 134

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C#的LINQ select查询、where过滤、group分组、join关联

语言集成查询 (Language Integrated Query) 是一系列直接将查询功能集成到 C# 语言的技术统称,用于在所有基于.NET平台的变成语言中更加直接地声明跨越、过滤和投射操作的一种方式,标准查询操作允许查询作用于所有基于IEnumerable接口的源。

小龙在线 3154

C# 数组Linq 的三种去重方式(Distinct)

C# 数组Linq 的三种去重方式(Distinct)

m0_48144113的博客 3770

select distinct 语句详解

select distinct :当我们期望返回的数据不存在重复数据时(每一行的数据都不一样) 例如:表a id(int) name(varchar) 分数(int) 1 qqq 95 2 qqq 84 3 www 77 4 eee 77 select distinct a.* from a -- 可以查询出所有的信息 select distinct a.id from a -- 可以查询出id不同的信息,则还是全部数据的id列(1,2,3,4) select distinc

good_good_xiu的博客 4万+

c# Linq 求和,求平均值,求最大,求最小,分组,计数

转载:【转】Linq 求和,求平均值,求最大,求最小,分组,计数 - Uoolo - 博客园1.简单形式:var q = from p in db.Products group p by p.CategoryID into g select g;语句描述:使用Group By按Categorhttps://www.cnblogs.com/wuchao/archive/2012/12/25/2832744.html 1.简单形式: var q = from p in db.Product...

橙-极纪元-JJYCheng 6709

SELECT DISTINCT 语句(去重)

SQL SELECT DISTINCT 语句 在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。 关键词 DISTINCT 用于返回唯一不同的值。 语法: SELECT DISTINCT 列名称 FROM 表名称 使用 DISTINCT 关键词 如果要从 “Company” 列中选取所有的值,我们需要使用 SELECT 语句: SELECT Comp...

fishermanMr 1万+

C#学习笔记之——LINQ

LINQ(Language Integrated Query) LINQ是.net框架的扩展,它允许我们以使用SQL查询数据库的方式来查询数据集合。 使用LINQ,你可以从数据库,程序对象的集合以及XML文档中查询数据。 查询语句 using System; using System.Linq; namespace Test { class Program { ...

Alina_catty的博客 499

5. Select/Select distinct语句以及Where子句的写法

本篇中我将主要介绍Select语句以及Where子句的写法,这是SQL语言中最地基的一块内容,必须牢牢掌握才能为未来写出复杂的功能多样化的SQL语句打下坚实基础。

zyypjc的博客 5313

SQL SELECT DISTINCT(选择不同) 语法

在我们的示例中Firefox和Microsoft Edge使用Microsoft Access。在一张表内,一列通常包含许多重复的值;有时你只想列出不同的(different)值。SELECT DISTINCT语法用于仅返回不同的(different)值。SELECT DISTINCT语句用于仅返回不同的(different)值。现在,让我们在上面的SELECT语法中使用DISTINCT关键字并查看结果。在本教程中,我们将使用著名的 Northwind 样本数据库。

爱编程的鱼的博客 2816

SQL去重distinct方法解析

来源:https://www.cnblogs.com/lixuefang69/p/10420186.html SQL去重distinct方法解析 一 distinct 含义:distinct用来查询不重复记录的条数,即distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回他的目标字段,而无法返回其他字段 用法注意: ...

weixin_30617695的博客 3735
上一篇: LINq distinct
下一篇: insertAdjacentHTML方法示例
sty2008boy
博客等级 码龄19年 9粉丝 187原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值