2011-07-06 48 views
0

有与现场年龄和名字表选择表,其中列表<int>

以下数据

jack 15 
sara 14 
mishel 13 
sufia 19 
green 22 
blue 56 

我们有以下成员的演示

list<int> age = new list<int>(); 
age.add(15); 
age .add(14); 
age .add(19); 

我如何通过提供搜索数据库

以下是选定的数据M表中

jack 15 
sara 14 
sufia 19 
+0

什么'我如何通过提供'来搜索数据库? –

+0

这个问题太含糊。这是什么类型的数据库?你有没有数据库访问策略?请参阅这些页面上的[faq]和[ask]以及相关链接。 –

回答

5

构建以编程方式使用IN子句的SQL查询:

string sql = @" 
    SELECT * 
     FROM [PeopleTable] 
    WHERE [Age] IN (" + age.Join(", ") + ")"; 

结果:

SELECT * 
    FROM [PeopleTable] 
WHERE [Age] IN (15, 14, 19) 
+0

好的答案......但是,我正在使用SP – jackStonre

+0

存储过程 – jackStonre

+0

@jackStonre:您如何使用存储过程?你是否通过了一个年龄列表?一张年龄表?逗号分隔的字符串? – mellamokb

0

如果使用LINQ到SQL,那么你应该创建此查询:

var query = from record in table 
      where ages.Contains(record.age) 
      select record; 
query.ToList(); 

如果你想使用SP,那么你必须动态地创建where子句:

string whereClause = string.Empty; 
foreach (int age in ages) 
{ 
    whereClause += age + ", "; 
} 
whereClause = whereClause.SubString(query, query.Length - 2) // Removing the last comma; 
string query = string.Format ("select * from tableName where age in ({0})", whereClause); 
+0

如果OP使用LINQ的话,很好的答案...... – mellamokb

+0

好的答案......但是,我使用SP – jackStonre

1

如果您正在使用MSSQL你可以创建一个有一列年龄的表型。

CREATE TYPE my_table_type AS TABLE(Age int NOT NULL) 
go 

CREATE PROCEDURE usp_FetchUser 
@age my_table_type READONLY 
AS 
select user_name from my_table where user_age in(select * from @age) 
go