2016-09-08 3 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. Например, linq, который возвращает всех лиц, имеющих DName = 'D'.

Вот код объекта:

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()) { человек = новый человек(); человек.Добавить (лицо); } ' – Michael

+2

Здесь вы смешиваете 2 разных понятия. Использование устройства чтения данных, а также получение данных с использованием Linq в 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, чтобы нарисовать только необходимые записи.

EDIT: Woops забыл закрыть соединение, я предлагаю вставив другой «используя» пункт для SqlConnection, так что она располагает себя, как только она достигает конца (с использованием (подключение SqlConnection = новый SqlConnection (ConnectionString)) {})

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(); 
Смежные вопросы