2013-05-08 52 views
-3

如何使用ClientID从Ilist中搜索客户端名称。我无法弄清楚。我创建了一个名为clientdetails的简单类,并与oracle数据库建立了连接。现在我只想使用ClientID搜索列表并显示结果。如何搜索Ilist中的项目并显示输出结果?

谢谢AK。

class ClientDetails 
{ 
    public string ClientID; 
    public string ClientName; 
    public string CreatedBy; 
    public string UpdatedBy; 

    public ClientDetails(string ClientID, string ClientName, string CreatedBy, string UpdatedBy) 
    { 
     this.ClientID = ClientID; 
     this.ClientName = ClientName; 
     this.CreatedBy = CreatedBy; 
     this.UpdatedBy = UpdatedBy; 
    } 
} 
class ConnectionSample 
{ 
    static void Main() 
    { 
     OracleConnection con = new OracleConnection(); 

     //using connection string to connect to oracle database 
     IList<ClientDetails> myfield = new List<ClientDetails>(); 
     try 
     { 

      con.ConnectionString = "xxxxxconnection stringxxxxx"; 
      con.Open(); 
      OracleCommand command = con.CreateCommand(); 
      string abc = "SELECT * FROM CLI_CLIENT_900"; 
      command.CommandText = abc; 
      OracleDataReader reader = command.ExecuteReader(); 
      while (reader.Read()) 
      { 
       myfield.Add(new ClientDetails(reader["CLIENT_ID"].ToString(), reader["CLIENT_NAME"].ToString(), reader["CREATED_BY"].ToString(), reader["UPDATED_BY"].ToString())); 

      } 

     } 
     catch (Exception ex) 
     { 
      Console.WriteLine("Error" + ex, "Error"); 
     } 
     //close and dispose oracleconnection object 

     con.Close(); 
     con.Dispose(); 

     foreach (ClientDetails c1 in myfield.OrderByDescending(s => s.ClientID)) 
     { 

      Console.Write("\n" + c1.ClientID); 
      Console.Write("\t"+c1.ClientName); 
      Console.Write("\t\t"+c1.UpdatedBy); 
     } 
    } 
    static void Display(IList<string> myfield) 
    { 
     foreach (string value in myfield) 
     { 
      Console.WriteLine("\t"+value); 
     } 
    } 
+2

为什么你不在*数据库*中执行过滤?你真正的*问题*是什么? – 2013-05-08 22:05:49

+0

我想使用clientid在列表上执行搜索操作。 – AK1 2013-05-08 22:07:15

+1

@AbeMiessler *因此*在这里没问题,如果OP的意思是“如何搜索一个项目并且_thereby_显示它” – poolie 2013-05-08 22:07:25

回答

4

如果你有一个项目List您可以选择下列方式具体项目:

myfield.Where(t => t.ClientId == 1234); 

这将返回ClientDetails对象的集合,其中ClientId成员等于1234

也就是说,这可能是过滤,你会更好的在数据库中做,除非你有一个令人信服的理由不会。

+0

感谢您的答复@Abe Miessler – AK1 2013-05-08 22:09:07

+0

糟糕! '=!= ==' – demoncodemonkey 2013-05-08 22:11:13

1

您可以使用First/FirstOrDefault

ClientDetails client = myfield.FirstOrDefault(c => c.clientID == givenID); 
if(client != null) 
    Console.Write(client.ClientName); 
else 
    Console.Write("clientID not found"); 
1

如果你有代码,您可以使用一个简单的LINQ查询以获得所需结果的列表。

var results = myList.Where(x => x.ClientId == clientIdImSearchingFor); 

foreach (Client c in results) 
    // print client data 

你也可以让它成为一个循环,如果它在里面;

foreach (Client c in ClientsList) 
    { 
     if (c.ClientId == ClientIdImSearchingFor) 
      //print client data 
    } 

另外,如果你想与您的SQL查询(而不是序列化后的结果),你可以使用相同的LINQ语句只MYLIST反而会是它代表了表的实体进行过滤。

+0

糟糕! '=!= ==' – demoncodemonkey 2013-05-08 22:09:29

+1

@demoncodemonkey固定。 – evanmcdonnal 2013-05-08 22:11:07

+0

@Abe犯了同样的错误;) – demoncodemonkey 2013-05-08 22:11:39