如何动态获取与不同组合集相关的数据

时间:2016-11-07 14:30:19

标签: c# sql asp.net linq informix

我希望获得与不同组合集相关的数据。

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)......等等。

如何使这样的东西成为动态组合。根据用户输入的位置组合设置。

3 个答案:

答案 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