黄聪

论SEO对人类的重要性,请看我的博客:hcsem.com

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

定义:
匿名类型是指包括一个或多个公共属性的类类型, 它提供了将查询结果临时组合在一起的捷径,从而不需要为每个查询结果集合指定一个有名称了类型.

在LINQ中,匿名类型广泛使用与查询表达式中的select子句,它们返回查询序列中每个元素属性的子集.

可以使用new操作符和对象初始化器来创建匿名类型.

匿名类型是直接从Object类继承而来,作为一个参考类型存在.

编译器给匿名类型分配一个名称,这个名称在源码级是不可用的.对于CLR来说,匿名类型与其他任何类型相比并不存在不同.

查询表达式可以将一个对象序列转化为一个具有不同形式和值的对象.

下面我们就直接看代码来体验一下吧:

1. 新建一个Linq To SQL类,连接上SQL 2005的示例数据库AdventureWorks,将Contact表拖拽入程序中:

2. 编写如下代码:

代码
//-----------------------------------------------------------
// All Rights Reserved , Copyright (C) 2010 ,黄聪 , Ltd .
//-----------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataClasses1DataContext context
= new DataClasses1DataContext();

Table
<Contact> contact = context.GetTable<Contact>();

var query
= from c in contact select new { c.FirstName, c.LastName, c.EmailAddress };

foreach (var i in query)
{
Console.WriteLine(
"FirstName:{0}/tLastName:{1}/tEmailAddress:{2}", i.FirstName, i.LastName, i.EmailAddress);
}
}
}
}

运行结果:

虽然我们定义的对象c包括15个字段,但是返回的序列只包含3个字段:

可以只返回对象中的部分信息,这是匿名类型的优势所在.

此外,使用匿名类型时还可以对序列中的某个字段重新命名:

代码
//-----------------------------------------------------------
// All Rights Reserved , Copyright (C) 2010 ,黄聪 , Ltd .
//-----------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;

namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
DataClasses1DataContext context
= new DataClasses1DataContext();

Table
<Contact> contact = context.GetTable<Contact>();

var query
= from c in contact select new { Email = c.EmailAddress };

foreach (var i in query)
{
Console.WriteLine(
"Email:{0}", i.Email);
}
}
}
}

运行结果:

可以看出我们将EmailAddress字段重命名为Email了.

好了,以上就是匿名类型在查询表达式中的应用示例,希望对初学LINQ的朋友有帮助.

相关文章

1.LinQ初体验 简单的示例(原创)

2.Linq初体验 Linq2SQL示例(原创)

3.Linq推迟查询的执行(原创)

4.Ling初体验 匿名类型在查询表达式中的使用

5.Linq初级班 标准查询操作符的使用和调用

6.Linq初级班 Linq To XML体验(编程篇)

7.Linq初级班 Linq To XML体验(基础篇)

8.Linq初级班 Linq To XML体验(高级编程篇)

posted on 2010-12-28 20:10  黄聪  阅读(1019)  评论(0编辑  收藏  举报