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 };
这两个查询之间有什么区别。
如果我们使用匿名类型会增加性能还是其他任何差异?
答案 0 :(得分:4)
这两个查询存在很大差异。首先返回实体的集合,第二个返回匿名类型的集合,其中包含一个名为“x”的成员,包含您的实体。
访问emps:
emps.First().SomeMember
访问emp1:
emp1.First().x.SomeMember
第一种方式是正确和自然的,第二种方式是奇怪的,在我看来并不是你想要实现的目标。
同样不是这样,在这里使用匿名类型会提高性能。无论如何,必须构建对象表示实体,但这次你以不太友好的形式获得它。
答案 1 :(得分:3)
大多数性能考虑可能都是基于SQL生成的 - 这不应该在这里改变。 (当然,你可以检查一下,但如果它有所作为,我就会错开。)
当然,创建一个匿名类型的实例需要花费更多的努力。我看不出为什么在这里使用匿名类型会使其执行更好的任何原因 - 我希望它执行得非常糟糕,但实际上显然不是。
更重要的是,我无法看到后者如何添加除了不必要的附加间接层之外的任何内容。它会使你的代码略微不清楚,没有任何好处。当您想要将单独的值组合在一起时,或者只查询表中列的一个子集时,匿名类型很有用 - 但单属性匿名类型很少有用。