LINQ查询中的Select子句

本文关键字:Select 子句 查询 LINQ | 更新日期: 2023-09-27 18:05:01

有人能告诉我吗?LINQ查询中Select子句有多少种类型,Select变化对性能的影响?

Examples I Found:

1。使用新类从表中获取对象

class DogInformation {
   public string Name {get;set;}
   public string BreedName {get;set;}
}
var result = (from a in new DataContext().Dogs                 
              select new DogInformation { a.Name, a.BreedName }).ToList();

2。使用匿名类型

var result = from d in db.Dogs
                 join b in db.Breeds on d.BreedId equals b.BreedId
                 select new
                        {
                            Name = d.Name,
                            BreedName = b.BreedName
                        };
    return result.ToList();

3。另一个我发现

var result = (from d in db.Dogs
             join b in db.Breeds on d.BreedId equals b.BreedId
             select new
                    {
                        Name = d.Name,
                        BreedName = b.BreedName
                    }).ToList()
                      .Select(x=> 
                          new Dog{
                              Name = x.Name,
                              BreedName = x.BreedName,
                          }).ToList();
return result;

LINQ查询中的Select子句

在linq中,有两种语法:

  • 查询语法
  • 方法语法(扩展方法)

所以你可以做

//query syntax
from item in <yourEnumerable> 
select ...

//method syntax
<yourEnumerable>.Select(m => xxx

现在在两种语法中,您都可以投影到匿名类型或强类型。

  //A1. query syntax and anonymous
   select new {Id = item.a, Name = item.b}
  //A2. query syntax and strong type
  select new Test{Id = item.a, Name = item.b}
  //B1. method syntax and anonymous
  .Select(m => new {Id = m.a, Name = m.b});
  //B2. method syntax and strong type
  .Select(m => new {Test{Id = m.a, Name = m.b});

我几乎可以肯定,查询和方法的语法没有什么差别。

现在,匿名和强类型之间的区别通常不是性能的问题,这是需求的问题…

嗨,你可以在http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b找到有用的例子。

浏览文档,唯一可以给您记录的其他select是您已经拥有它们的地方,如select a

顺便说一句VB。. NET有Select Name=d.Name, BreedName=b.BreedName,但这只是一个更加匿名的类型。