LINQ中的匿名类型查询或普通查询

var emps = from x in DB where x.ID = 100 select x; var emp1 = from x1 in DB where x1.ID = 100 select new { x }; 

这两个查询之间有什么区别。

如果我们使用匿名类型,性能会增加还是其他任何差异呢?

这两个查询存在很大差异。 首先返回实体的集合,第二个返回匿名类型的集合,其中包含一个名为“x”的成员,包含您的实体。

访问emps:

 emps.First().SomeMember 

访问emp1:

 emp1.First().x.SomeMember 

第一种方式是正确和自然的,第二种方式是奇怪的,在我看来并不是你想要实现的目标。

这也不是真的,在这里使用匿名类型会提高性能。 无论如何,必须构建对象表示实体,但这次你以不太友好的forms获得它。

大多数性能考虑都可能是根据SQL生成的 – 而且这里不应该改变。 (当然,你可以查看,但如果它有所作为,我就会错开。)

当然,创建一个匿名类型的实例需要花费更多的努力。 我看不出为什么在这里使用匿名类型会使它表现更好的任何原因 – 我希望它表现得非常糟糕,但实际上并不明显

更重要的是,我无法看到后者如何添加除了不必要的额外间接层之外的任何内容。 这将使您的代码略微不清楚,没有任何好处。 当您想要将单独的值组合在一起时,或者只查询表中列的一个子集时,匿名类型很棒 – 但单属性匿名类型很少有用。