定义:
匿名类型是指包括一个或多个公共属性的类类型, 它提供了将查询结果临时组合在一起的捷径,从而不需要为每个查询结果集合指定一个有名称了类型.
在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);
}
}
}
}
// 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);
}
}
}
}
// 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的朋友有帮助.
作者:黄聪
出处:http://www.cnblogs.com/huangcong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
出处:http://www.cnblogs.com/huangcong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。