2016-09-08 70 views
-1

這裏是我到目前爲止的代碼清單,從SQL服務器返回的一些數據:LINQ操縱自定義對象

try 
{ 
    connection.Open(); 
    cmd.CommandText = "select * from dbo.contact"; 
    SqlDataReader dr = cmd.ExecuteReader(); 
    List<person> persons = new List<person>(); 
    person person; 
    while (dr.Read()) 
    { 
     person = new person(); 
     persons.Add(person); 
    } 
    persons.Count(); 
} 
catch { 

} 

什麼,我想下一個是使用LINQ to提取從列表中選擇特定的記錄。例如,一個返回所有具有DName ='D'的人的linq。

這裏是對象的代碼:

public class person 
{ 
    public string idvalue { get; set; } 

    public string DName { get; set; } 

    public string FName { get; set; } 

} 

歡迎任何幫助!

+3

這是什麼問題? – HimBromBeere

+0

你是否使用'SqlDataReader'?或者對於從db讀取的每條記錄,您正在創建一個新人(似乎是空的)並添加到集合中? while(dr.Read()) { person = new person(); persons.Add(person); }' – Michael

+2

你在這裏混合了2個不同的概念。使用數據讀取器並使用Linq to sql或EF檢索數據。你無法做到這一點,選擇一個或另一個。我建議你在做任何進一步工作之前先做一個教程或者閱讀一下這些概念。 – Igor

回答

0

這是我怎麼會做它:

static void Main(string[] args) 
    { 
     List<person> FilteredPeople = GetPeople("D"); 
    } 
    static List<person> GetPeople(string condition) 
    { 
     try 
     { 
      connection.Open(); 
      using (SqlCommand command = new SqlCommand("select * from dbo.contact WHERE DName LIKE @mycondition", connection)) 
      { 
       cmd.Parameters.Add(new SqlParameter("mycondition", condition)); 
       SqlDataReader dr = cmd.ExecuteReader(); 
       List<person> persons = new List<person>(); 
       while (dr.Read()) 
       { 
        person p = new person(); 
        p.idValue = dr["Id"].ToString(); 
        p.DName = dr["DName"].ToString(); 
        p.FName = dr["FName"].ToString(); 
        persons.Add(p); 
       } 
       return persons; 
      } 
     } 
     catch { } 
    } 

正如其他人所指出的,明智的做法是儘量減少數據庫的負載,因此它的更好在SQLCommand上插入條件以僅繪製必要的記錄。 (SqlConnection連接=新的SqlConnection(連接字符串)) 編輯:woops忘記關閉連接,我建議爲sqlConnection插入另一個「使用」子句,以便它一旦它到達最後(使用)

1

它看起來像以下是你在找什麼。它會返回一個IEnumerable有一個結果

public class Person 
{ 
    public string idvalue { get; set; } 
    public string DName { get; set; } 
    public string FName { get; set; } 
} 

List<Person> persons = new List<Person>(); 
persons.Add(new Person { DName = "A" }); 
persons.Add(new Person { DName = "B" }); 
persons.Add(new Person { DName = "C" }); 
persons.Add(new Person { DName = "D" }); 
var result = persons.Where(p => p.DName == "D"); 
result.Dump();