`
chungle
  • 浏览: 59995 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

LINQ to SQL语句(2)之Select/Distinct

阅读更多

Select/Distinct操作符

适用场景:o(∩_∩)o… 查询呗。

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

Select/Distinct操作包括9种形式,分别为简单用法、匿名类型形式、条件形式、指定类型形式、筛选形式、整形类型形式、嵌套类型形式、本地方法调用形式、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 = "s" };编译器自动产生一个有property叫做Name的匿名类,然后按这个类型分配内存,并初始化对象。但是var d = new {"s"};是编译不通过的。因为,编译器不知道匿名类中的property的名字。例如string c = "d";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};

上面语句描述:使用 SELECT 和匿名类型返回仅含客户联系人姓名和电话号码的序列

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

上面语句描述:使用SELECT和匿名类型返回仅含雇员姓名和电话号码的序列,并将FirstName和LastName字段合并为一个字段“Name”,此外在所得的序列中将HomePhone字段重命名为Phone。

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

上面语句描述:使用SELECT和匿名类型返回所有产品的ID以及HalfPrice(设置为产品单价除以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"
    };

上面语句描述:使用SELECT和条件语句返回产品名称和产品供货状态的序列。

4.指定类型形式:

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

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

上面语句描述:使用SELECT和已知类型返回雇员姓名的序列。

5.筛选形式:

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

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

上面语句描述:使用SELECT和WHERE返回仅含伦敦客户联系人姓名的序列。

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}
    };

语句描述:使用SELECT 和匿名类型返回有关客户的数据的整形子集。查询顾客的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
    };

语句描述:使用嵌套查询返回所有订单及其OrderID 的序列、打折订单中项目的子序列以及免送货所省下的金额。

8.本地方法调用形式(LocalMethodCall):

这个例子在查询中调用本地方法PhoneNumberConverter将电话号码转换为国际格式。

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)
         };

PhoneNumberConverter方法如下:

public string PhoneNumberConverter(string Country, string Phone)
{
    Phone = Phone.Replace(" ", "").Replace(")", ")-");
    switch (Country)
    {
        case "USA":
            return "1-" + Phone;
        case "UK":
            return "44-" + Phone;
        default:
            return Phone;
    }
}

下面也是使用了这个方法将电话号码转换为国际格式并创建XDocument

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();

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

分享到:
评论

相关推荐

    LINQ_to_SQL语法及实例大全

    2. LINQ to SQL语句之Select/Distinct:Select语句用于选择数据源中满足条件的字段或数据。Distinct语句用于去除重复的数据项。在Select/Distinct的使用中,我们可以看到简单用法、匿名类型形式、条件形式、指定类型...

    LINQ to SQL语句.docx

    二、 Linq to SQL 语句(2)之 Select/Distinct Select 子句是 Linq to SQL 语句中用于选择数据记录的子句。Select 子句可以使用多种形式,包括简单用法、匿名类型形式、条件形式、指定类型形式、筛选形式、shaped ...

    LINQ TO SQL 语法讲解 基本知识

    LINQ to SQL语句(1)之Where LINQ to SQL语句(2)之Select/Distinct LINQ to SQL语句(3)之Count/Sum/Min/Max/Avg LINQ to SQL语句(4)之Join

    Linq to Sql 教程大全

    它提供了将数据库表映射到.NET Framework中类的能力,允许开发人员通过编写LINQ查询而不是SQL语句来操作数据。 #### 二、LINQ to SQL 的基本概念 - **数据上下文(DataContext)**:用于连接数据库并管理对数据库...

    LINQ_to_SQL语法及实例详解.docx

    ### LINQ to SQL语法及实例详解 ...以上是LINQ to SQL中关于Where和Select/Distinct操作的一些基本概念和示例。掌握这些操作可以帮助开发者更高效地处理数据库查询,从而提高应用程序的性能和可维护性。

    LINQ to SQL语法及实例大全

    在LINQ to SQL中,这些表达式树会被转换成对应的SQL语句,然后发送到数据库执行。 **关于LINQ的技巧和好处** - 提高代码可读性和可维护性:查询表达式更接近SQL的自然语法,使得代码更容易理解。 - 强类型检查:...

    LINQ To SQL 语法及实例大全

    ### LINQ to SQL 语句(2) - Select/Distinct **Select** 用于指定查询结果的形状,可以返回新的对象实例或匿名类型。 1. **简单用法**: ```csharp var names = from customer in customers select customer....

    linq to sql中文教程

    **LINQ to SQL**是Microsoft .NET Framework中的一个组件,它提供了一种将数据从数据库映射到内存中的对象的方式,允许开发人员使用面向对象的编程语言(如C#或VB.NET)来操作数据库,而无需编写SQL语句。...

    LINQ To SQL 语法详解

    通过本文介绍,我们详细了解了 LINQ to SQL 中的 Where 子句和 Select / Distinct 操作符的使用方法。这些概念和技巧对于编写高效、易于维护的数据库查询代码至关重要。理解并掌握这些知识可以帮助开发者更好地利用 ...

    linq to sql 学习笔记

    5. `DataContext` 类:它是 LINQ to SQL 的核心,负责将 LINQ 查询转换为 SQL 语句,与数据库交互,并处理数据的读写操作。 6. 实体类:在 LINQ to SQL 中,数据表通常映射为 C# 类,如 `Customers`、`Orders` 等。...

    Ling to sql 语句

    `select`关键字在Linq to SQL中用来定义查询结果的形状。你可以选择返回整个对象、对象的部分属性或者创建匿名类型。例如,`from customer in Customers select customer.Name`将返回一个只包含客户名称的序列。 **...

    LINQ_TO_SQL 文档

    LINQ to SQL的工作原理是将C#或VB.NET的查询表达式转换为SQL语句,然后执行这些SQL语句以与数据库进行交互。这种类型的ORM(对象关系映射)框架允许开发者使用面向对象的编程方式来操作数据库,避免了传统的ADO.NET...

    Linq-To-Sql语法大全

    LINQ to SQL 语句(2) - Select/Distinct** `Select` 用于转换查询结果,`Distinct` 用于去除重复项。 #### 2.1 简单用法: ```csharp var names = from customer in customers select customer.Name; ``` 这将...

    lambda-LINQ-SQL对照表

    SQL中的`SELECT`语句用于选取数据表中的列或组合列。在Lambda LINQ中,这对应于`.Select()`方法。例如: ```csharp // SQL: SELECT * FROM HumanResources.Employee var allEmployees = Employees.Select(e =&gt; e...

    LINQ_to_SQL语法及实例大全.doc

    LINQ to SQL 语句(2) - Select/Distinct** - **简单用法**:`Select`用于投影数据,将源数据转换为新的形式。例如: ```csharp var names = from customer in Customers select customer.Name; ``` - **匿名类型...

Global site tag (gtag.js) - Google Analytics