2011-07-06 82 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