【发布时间】:2015-12-31 20:01:17
【问题描述】:
我今天一直在试验 LINQ 和 DataTable。
var query = from row1 in table1.AsEnumerable()
from row2 in table2.AsEnumerable()
where
(row1.Field<string>("a") == row2.Field<string>("b"))
select new Foo
{
Property1 = row1.Field<string>("Hey")
Property2 = row2.Field<string>("Ho")
};
得出了一个奇怪的结论,无论我使用select new Foo 还是select new Foo(),查询的工作方式完全相同。我真的很想与代表等一起更深入地了解 linq 机制,以清楚地理解这一点 - 但现在,对于一个简单的人来说 - 有没有区别,如果有,那会是什么?
编辑
这个问题在 SOF 上已经有一些类似的答案,但“对象初始化器”并没有出现在脑海中。它还针对 LINQ 提出,其中 90% 的 Web 提示在匿名类型上运行(不知道为什么,我发现使用具体类型有一些好处,尤其是 Intellisense)。如果任何材料确实在 LINQ 中指定了具体的类型实现示例,我只能找到不带括号的 new Foo 。使用 LINQ 构造,尤其是对于初学者来说,找出那里初始化的内容(对象、委托、谓词等 - 至少对我来说)可能会很棘手,所以希望至少有些人会发现问题和响应很有用。
【问题讨论】:
-
两个很好的答案。谢谢,我真的很难决定接受哪一个 - 1 更快,或者 2 来自 John Skeet 的例子真的对我说话。
-
我能问一个澄清的小问题吗 - 我不知何故没有得到智能感知,例如查询中的 Property1 ?这正常吗?
-
无论是否有括号,IntelliSense 应该都能正常工作......也许只是你的 IDE 很慢?
-
谢谢约翰,Intellisense 工作,太棒了! @Jakub - 无意冒犯,也感谢您的回答,我不知何故无法抗拒 John Skeet ;)