在LINQ查询中选择Clause

时间:2014-05-26 06:13:30

标签: c# linq

任何人都可以告诉我: Select查询中有多少种类型的LINQ条款以及它对Select的性能有何影响?

我找到的例子:

1。使用New Class从表中获取对象

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;

3 个答案:

答案 0 :(得分:3)

嗯,在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});

我几乎可以肯定查询和方法语法之间没有差异。

现在,匿名和强类之间的差异通常不是必须解决的问题,而是需求问题...

答案 1 :(得分:2)

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

答案 2 :(得分:1)

浏览the documentation,唯一可以为您提供记录的select就是select a已经拥有它们的地方。

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