我需要为另一个表中的每个匹配行选择一列。听起来很简单,但有一个转折。
我下面的代码工作得很好,并且正是我想要的。但我必须将要查找的部门硬编码到查询中。我希望它根据在“部门”表中找到的部门代码进行子选择,而不要求我对该公司可能存在的每个可能的部门进行硬编码。
我需要根据 DepartmentsStatus 表中定义的公司存在的部门,从 DepartmentStatus 选择匹配的部门状态。
我怀疑这是一个数据透视表,但它们比我的水平高一点。
(公司表)
Company_ID Company_Name
-------------------------
1 Home Office
2 Stanton Office
3 NYC Office
Run Code Online (Sandbox Code Playgroud)
(部门表)
CompanyID Department_Code
----------------------------
1 Sales
1 Inventory
1 Retail
1 Maint
2 OtherDept
2 ThatDept
2 BobsDept
Run Code Online (Sandbox Code Playgroud)
(部门状态表)
Company_ID Department StatusCode
-----------------------------------------
1 Sales InReview
1 Inventory InReview
1 Retail Ready
1 Maint Done
2 OtherDept InReview
2 ThatDept Research
2 BobsDept InReview
Run Code Online (Sandbox Code Playgroud)
注意:即使 Company_ID+Department 上有唯一索引,我也使用“TOP 1”,因此永远不会有多个匹配行。
因此,对于 Company_ID=1:
select Company_ID,
(select top 1 …Run Code Online (Sandbox Code Playgroud) 关于此数据和(伪)代码:
List<myClass> Periods = new List<myClass>();
// contents of Periods is:
Periods[0] = "000";
Periods[1] = "111";
Periods[2] = "222";
Periods[3] = "REST"; // REST PERIOD
Periods[4] = "444";
Periods[5] = "REST"; // REST PERIOD
Periods[6] = "666";
Periods[7] = "777";
Periods[8] = "888";
Run Code Online (Sandbox Code Playgroud)
以下代码遍历列表,并在REST周期之间将多个列表元素拉出到单个列表中,并将这些列表添加到"列表列表"中.休息时段之间可能有一个或多个列表条目.
List<List<Period>> DutyDayPeriods = new List<List<Period>>();
List<Period> thisList = new List<Period>();
for (int i = 0; i < Periods.Count; i++ ) {
thisList.Add(Periods[i]);
if (Periods[i].Rest == "REST") {
DutyDayPeriods.Add(thisList);
thisList.Clear();
}
}
Run Code Online (Sandbox Code Playgroud)
在for循环的底部,DutyDayPeriods <>包含1-n个相同的"thisList"副本.基本上是最后一个休息期和列表结尾之间的最后一组列表项:
所以,我期待以下内容:
DutyDayPeriods[0] …Run Code Online (Sandbox Code Playgroud) 我是一个精通但不是专家的 OOP 程序员。我知道可以覆盖类方法来改变默认行为。
我想重载 .NET 类方法本身,并覆盖该StreamWriter.WriteLine(string str, bool APPEND)方法以返回要求编写的任何内容而不是返回void.
这是因为我必须登录到一个文件和控制台,我正在编写的字符串是一个复杂的表达式,我不想复制,也不想消耗额外的资源(并添加额外的代码行) 来创建一个 Baggage 变量,只是为了在我写入控制台和日志文件的几十个地方中的每一个地方记录控制台和日志文件。
取而代之的是:
Console.WriteLine(a + b + c + d + e);
sw.WriteLine(a + b + c + d + e);
Run Code Online (Sandbox Code Playgroud)
或这个:
string temp = a + b + c + d + e;
Console.WriteLine(temp);
sw.WriteLine(temp);
Run Code Online (Sandbox Code Playgroud)
我反而想这样做:
Console.WriteLine(
sw.WriteLine(a + b + c + d + e)
);
Run Code Online (Sandbox Code Playgroud)
为此,我需要 sw.WriteLine() 方法将其字符串参数作为返回值返回。
我了解覆盖方法所涉及的危险,但这是一个非常简单的单模块.cs控制台应用程序,它只是搜索文本文件并将匹配行报告给控制台和日志文件。
当我在 Visual Studio 中使用对象浏览器(查看定义)时,我看到:
public static void WriteLine(string format, object arg0); …Run Code Online (Sandbox Code Playgroud)