C# 如何在列表中搜索<;字符串>;?

C# 如何在列表中搜索<;字符串>;?,c#,list,C#,List,我有数据库和表tbl_employee。在表中,我存储用户名。我使用以下代码将所有用户名保存到列表中: string name = txtUsername.Text; List<string> lst = new List<string>(); NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=db;User Id=postgres;Passw

我有数据库和表tbl_employee。在表中,我存储用户名。我使用以下代码将所有用户名保存到列表中:

string name = txtUsername.Text;       
List<string> lst = new List<string>();

NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=db;User Id=postgres;Password=postgres;"); 

conn.Open();
string sql = "SELECT username FROM tbl_employee";
NpgsqlCommand command = new NpgsqlCommand(sql, conn);  
NpgsqlDataReader dr = command.ExecuteReader();  
while (dr.Read())
{
    lst.Add(dr.GetString(0));
}
这是:

if (lst.Exists(element => element == name)) 
    //It says name exists even though it doesn't

尝试使用
lst.Contains(name)
尝试使用
lst.Contains(name)
您可以使用
Contains

if (lst.Contains(name)) ...
但是如果这就是您对列表所做的一切,我建议更改此代码,以便它直接从数据库查询
tbl_empoyee
表。我不熟悉
NpgsqlCommand
,但它看起来应该有点像这样:

bool result = false;
string sql = "SELECT username FROM tbl_employee WHERE username = :name";
NpgsqlCommand command = new NpgsqlCommand(sql, conn);  
command.Parameters.AddWithValue("name", name);
NpgsqlDataReader dr = command.ExecuteReader();  
while (dr.Read())
{
    result = true; // record found
}
或者像这样(继蒂姆·施梅尔特之后):


您可以使用
Contains

if (lst.Contains(name)) ...
但是如果这就是您对列表所做的一切,我建议更改此代码,以便它直接从数据库查询
tbl_empoyee
表。我不熟悉
NpgsqlCommand
,但它看起来应该有点像这样:

bool result = false;
string sql = "SELECT username FROM tbl_employee WHERE username = :name";
NpgsqlCommand command = new NpgsqlCommand(sql, conn);  
command.Parameters.AddWithValue("name", name);
NpgsqlDataReader dr = command.ExecuteReader();  
while (dr.Read())
{
    result = true; // record found
}
或者像这样(继蒂姆·施梅尔特之后):


谢谢奎斯!我按照你的建议把它改成了计数。这是我的最终代码:

string name = txtUsername.Text;       

NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=db;User Id=postgres;Password=postgres;"); 

conn.Open();
string sql = "SELECT COUNT(*) FROM tbl_employee WHERE username = @val1";
NpgsqlCommand command = new NpgsqlCommand(sql, conn);  
command.Parameters.AddWithValue("@val1", name);
var result = command.ExecuteScalar();
int i = Convert.ToInt32(result);
if (i != 0)
{
    FormsAuthentication.RedirectFromLoginPage(name, Persist.Checked);
}
else
{
    lblMessage.Text = "Invalid username or password";
 }

谢谢奎斯!我按照你的建议把它改成了计数。这是我的最终代码:

string name = txtUsername.Text;       

NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;Database=db;User Id=postgres;Password=postgres;"); 

conn.Open();
string sql = "SELECT COUNT(*) FROM tbl_employee WHERE username = @val1";
NpgsqlCommand command = new NpgsqlCommand(sql, conn);  
command.Parameters.AddWithValue("@val1", name);
var result = command.ExecuteScalar();
int i = Convert.ToInt32(result);
if (i != 0)
{
    FormsAuthentication.RedirectFromLoginPage(name, Persist.Checked);
}
else
{
    lblMessage.Text = "Invalid username or password";
 }

改为在数据库中进行筛选<代码>从tbl_员工中选择计数(*),其中username=@username@TimSchmelter绝对正确。。。如果你有一百万条不必要的记录呢?在你的代码中,
lst
是一个
列表
,它没有
FindString
方法(我知道没有使用该名称的扩展方法),所以你应该得到一个“不包含定义”错误,而不是“无效参数”。但是,
ListBox
类上有
FindString
方法。只是想澄清一下,到底什么是
lst
,这两段代码中的对象是否相同?谢谢!我改为数据库中的countFilter<代码>从tbl_员工中选择计数(*),其中username=@username@TimSchmelter绝对正确。。。如果你有一百万条不必要的记录呢?在你的代码中,
lst
是一个
列表
,它没有
FindString
方法(我知道没有使用该名称的扩展方法),所以你应该得到一个“不包含定义”错误,而不是“无效参数”。但是,
ListBox
类上有
FindString
方法。只是想澄清一下,到底什么是
lst
,这两段代码中的对象是否相同?谢谢!我把它改成了计数