LINQ是对.NET以来最伟大的改进之一,它可以节省大量的时间和代码行.但是,对于我来说,流畅的语法似乎比查询表达式语法更自然.
var title = entries.Where(e => e.Approved)
.OrderBy(e => e.Rating).Select(e => e.Title)
.FirstOrDefault();
var query = (from e in entries
where e.Approved
orderby e.Rating
select e.Title).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)
这两者之间是否有任何区别,或者一方面有什么特别的好处呢?
Aggregate当用作具有多个Into子句的Linq表达式的第一个(外部)子句时,VB.NET的查询是否存在致命缺陷,因为每个Into子句是单独执行的?
SELECT MIN(ZoneMin), MAX(ZoneMin) FROM PlantLINQ to SQL中的"明显"答案是
Dim limits = Aggregate p In Plants Select p.ZoneMin Into Min(), Max()
Run Code Online (Sandbox Code Playgroud)
但是,这个答案实际上在单独的 SQL查询中检索每个Min和Max(以及如果包括其他聚合函数,如Count和Average).这可以在LINQPad中轻松看到.
是否存在LINQPad未显示的事务(或其他使这些查询成为原子的事件),或者这是一种等待发生的竞争条件?(因此,您必须执行上述问题的答案中显示的技巧,以强制返回多个聚合的单个查询.)
总之,是否使用LINQ-to-SQL查询Aggregate在单个(或至少"原子")查询中返回多个聚合函数?
(我也说"显而易见",因为对我来说显而易见的答案Aggregate p In Plants Into Min(p.ZoneMin), Max(p.ZoneMin),实际上检索了整个表两次,即使在优化后,然后使用Linq-to-Entities Min并Max获得结果:-()
只是出于好奇:
许多LINQ扩展方法存在的通用和非通用的变种,例如Any和Any<>,Where和Where<>等写我的疑问,我通常使用非通用变种,它工作正常.
当必须使用通用方法时会出现什么情况?
---编辑---
PS:我知道内部只调用泛型方法,编译器尝试<>在编译期间解析通用括号的内容.我的问题是什么案例然后必须明确提供类型而不依赖编译器的直觉?
在VB中,我们有Handles子句,它允许将Handler添加到控件的事件中,而不将其放入xaml文件中(直接放入VB文件中).
XAML:
<Button x:Name="myButton" />
Run Code Online (Sandbox Code Playgroud)
VB:
Private Sub Button_Click() Handles myButton.Click
End Sub
Run Code Online (Sandbox Code Playgroud)
可以使用该做的好处之一是使用Visual Studio的下拉列表中自动添加事件,而不需要去XAML文件,并改变它的可能性.阅读这个问题(和答案),以便更好地理解我在说什么:
这个问题的答案并没有具体说明为什么C#没有在Visual Studio中这个功能,但很明显对我来说:因为它使用了Handles子句对代码隐藏添加事件C#不具备此功能.
我知道我们可以使用+ =并在构造函数上手动添加事件,在InitializeComponent下面(这几乎是同一件事),但是VB也有AddHandler可以在构造函数(以及其他地方)上添加事件,并且它不是自动的,对我来说不如Handles条款可靠.
我的问题是:
为什么它从未实施?这不可靠吗?非安全?有什么解决方法吗?