这似乎是SQL的主要问题:
SELECT
A, B, C,
...
X, Y,
(
SELECT TOP 1
b.R
FROM (
SomeHugeSubqueryThatInclduesAWhereClause
) b
ORDER BY
b.R
) AS Z
FROM (
AlmostTheSameSubqueryThatIncludesAnOnlySlightlyDifferentWhereClause
) a
Run Code Online (Sandbox Code Playgroud)
使用这样的子查询的问题是代码重复.有一些解决方法,包括临时表,存储过程等.
这些变通办法至少有一个问题是它们相对涉及更通用的语言只需要一行代码的东西.其他语言允许您快速添加变量并保持引用它,即使变量引用的对象具有延迟执行迭代器等.
临时表可能与延迟执行的想法有点争论.视图,存储过程和函数将为数据库模式添加更多内容,并使部署和更新变得更加复杂.以上所有内容都添加了几行样板代码,只是觉得过于简单的过度工程.
所以问题是......在这样的情况下,是否有一种好的,通用的方法可以避免代码重复,而不会有一些感觉过度设计并且自己添加几行的东西?
网上有几个地方人们提到 Azure DevOps 在使用 .NET Core 3.1 SDK 之类的东西时遇到问题。通常,建议是使用该Use .NET Core任务将 Azure DevOps 从它之前使用的任何版本切换到 3.1,这通常有效。
就我而言,Azure DevOps 仍然无法判断已安装 3.1。即使我登录到代理机器(我们使用我们自己的代理),卸载除 3.1 SDK 之外的所有内容,然后重新启动,Azure DevOps 仍会尝试使用 2.0 或其他版本。
在Visual Studio build任务之前,我有一个Command line带有以下脚本的任务:
dotnet --info
Run Code Online (Sandbox Code Playgroud)
这会产生,减去开头和结尾的一些额外文本,如下:
.NET Core SDK (reflecting any global.json):
Version: 3.1.102
Commit: 573d158fea
Runtime Environment:
OS Name: Windows
OS Version: 10.0.17763
OS Platform: Windows
RID: win10-x64
Base Path: C:\Program Files\dotnet\sdk\3.1.102\
Host (useful for support):
Version: 3.1.2
Commit: 916b5cba26
.NET Core SDKs installed:
3.1.102 [C:\Program …Run Code Online (Sandbox Code Playgroud) 给出以下代码:
类CEvent:
public class CEvent extends Event
{
public static const TYPE:String = "cEvent";
private var m_strCode:String;
public function get code():String
{
return m_strCode;
}
public function CEvent(pCode:String, bubbles:Boolean=false,
cancelable:Boolean=false)
{
super(TYPE, bubbles, cancelable);
m_strCode = pCode;
}
}
Run Code Online (Sandbox Code Playgroud)
A类:
dispatchEvent(new CEvent(MY_CONST))
Run Code Online (Sandbox Code Playgroud)
B级:
m_a = new A();
m_a.addEventListener(CEvent.TYPE, onCEvent);
.
.
.
private function onCEvent(pEvent:CEvent):void
{
switch (pEvent.code)
{
case A.MY_CONST:
dispatchEvent(pEvent);
}
}
Run Code Online (Sandbox Code Playgroud)
C级:
m_b = new B();
m_b.addEventListener(CEvent.TYPE, onCEvent);
.
.
.
private function onCEvent(pEvent:CEvent):void
{ // breaks …Run Code Online (Sandbox Code Playgroud) 采用以下AS3/MXML代码:
<?xml version="1.0" encoding="utf-8"?>
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" xmlns="*"
backgroundColor="#000000" showStatusBar="false" width="400" height="400"
minWidth="0" minHeight="0">
<s:Rect width="50%" height="50%">
<s:fill>
<s:SolidColor color="#0000FF"/>
</s:fill>
</s:Rect>
</s:WindowedApplication>
Run Code Online (Sandbox Code Playgroud)
这主要是有效的.当我增加或减少程序的大小时,Rect的大小将缩放为WindowedApplication的宽度和高度的50%.但是随着我不断降低窗口的高度,缩小比例会停止几个像素,这个数字很小.这就像我可以让Rect沿着y轴一样小:

在达到这一点之后,即使我不断减小WindowedApplication的大小,也没有任何反应.在我再次开始增加窗口大小之前,Rect保持完全相同的高度.更重要的是,Rect的高度为12像素,这是一个非常随意的数字,它可以停止.
但是,如果我改变:
<s:Rect width="50%" height="50%">
Run Code Online (Sandbox Code Playgroud)
至:
<s:Rect width="{width / 2}" height="{height / 2}">
Run Code Online (Sandbox Code Playgroud)
这个问题神奇地消失了:

WindowedApplication的高度为5,Rect的高度约为"两个半".
为什么会有这样的区别?在前面的例子中,我尝试增加,然后再次减小尺寸几次,甚至缓慢,但它总是卡在同一个地方.谢谢!
apache-flex ×2
flash ×2
.net-core ×1
actionscript ×1
air ×1
azure-devops ×1
inheritance ×1
mxml ×1
sql ×1
sql-server ×1
t-sql ×1