我希望获得与不同组合集相关的数据。
EX:
如果我有桌子:EmployeeLocation
empNum locationId extensionId year
534 CX1 AX 2015
534 LM1 RQ 2015
677 LM1 ST 2015
Res:534,2015
现在,我想在CX1 AND LM1
中查询位于其中的所有员工(2015
)。也许我将组合更改为(CX1 AND LM1 AND LR3
)......等等。
如何使这样的东西成为动态组合。根据用户输入的位置组合设置。
答案 0 :(得分:1)
您可以使用Linq的方法如下。
假设您有一个类如下:
private class EmployeeLocation {
public int EmpNum {get; set;}
public string LocationId {get; set;}
public string ExtensionId {get; set;}
public int Year {get; set;}
}
您可以根据输入中提供的参数创建一个处理搜索的方法:
public IEnumerable<EmployeeLocation> Search(
int[] empNumArray,
string[] locationIdArray,
string[] extensionIdArray,
int[] yearArray){
IEnumerable<EmployeeLocation> result = EmployeeLocationList;
if (empNumArray != null){
foreach(var empNum in empNumArray){
result = result.Where(r => r.EmpNum == empNum);
}
}
if (locationIdArray != null){
foreach(var locationId in locationIdArray){
result = result.Where(r => r.LocationId);
}
}
if (extensionIdArray != null){
foreach(var extensionId in extensionIdArray){
result = result.Where(r => r.ExtensionId == extensionId);
}
}
if (yearArray != null){
foreach(var year in yearArray ){
result = result.Where(r => r.Year == year);
}
}
return result;
}
答案 1 :(得分:1)
如何检查每个条件然后取结果的交集?
Order
答案 2 :(得分:0)
DECLARE
locationId VARCHAR(3);
year INTEGER;
BEGIN
EXECUTE IMMEDIATE
'SELECT empNum FROM EmployeeLocation
WHERE locationId = CX1 AND locationId = LM1 AND year = 2015';
END;
这可能是描述查询的简单方法。我认为需要的其余部分是一个事件处理程序,用于指定要使用的locationId
。
以下是更详细的信息:
CREATE OR REPLACE PROCEDURE empNum(locId VARCHAR(3), yr VARCHAR(4)) IS
TYPE cur_typ IS REF CURSOR;
c cur_typ;
locationId VARCHAR(3);
year INTEGER;
BEGIN
EXECUTE IMMEDIATE
'SELECT empNum FROM EmployeeLocation
WHERE locationId = locId AND locationId = locId AND year = yr';
END;
我认为使用cur_type作为引用游标可以用于查询字符串。
来源:https://docs.oracle.com/cd/A97630_01/appdev.920/a96590/adg09dyn.htm