繁体   English   中英

在LINQ查询中选择条款

[英]Select Clause In LINQ Query

谁能告诉我: LINQ查询中有多少种Select子句可用,并且随着Select变化,它对性能有何影响?

我发现的例子:

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中,您有两种语法:

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

所以你可以做

//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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM