小编Kir*_*ace的帖子

根据另一个表中的列值选择一个表中的行?

我需要为另一个表中的每个匹配行选择一列。听起来很简单,但有一个转折。

  • 我有一张表,其中包含公司 ID,并定义了公司。
  • 我有另一个表定义了这些公司的部门。
  • 我有第三个表,其中包含各种部门状态代码。

我下面的代码工作得很好,并且正是我想要的。但我必须将要查找的部门硬编码到查询中。我希望它根据在“部门”表中找到的部门代码进行子选择,而不要求我对该公司可能存在的每个可能的部门进行硬编码。

我需要根据 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)

sql sql-server pivot inner-join aggregate-functions

5
推荐指数
1
解决办法
8002
查看次数

List.Add(X).是xa REFERENCE还是VALUE?

关于此数据和(伪)代码:

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)

c#

4
推荐指数
1
解决办法
111
查看次数

c# 我可以覆盖 .NET StreamWriter.WriteLine() 以返回它写的内容而不是 void 吗?

我是一个精通但不是专家的 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)

.net c# oop overriding

0
推荐指数
1
解决办法
55
查看次数

标签 统计

c# ×2

.net ×1

aggregate-functions ×1

inner-join ×1

oop ×1

overriding ×1

pivot ×1

sql ×1

sql-server ×1