linq操纵自定义对象列表

时间:2016-09-08 15:17:49

标签: c# linq

到目前为止,这是我的代码,从SQL服务器返回一些数据:

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; }

}

欢迎任何帮助!

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分: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上插入条件,以便只绘制必要的记录。

编辑:woops忘了关闭连接,我建议插入另一个&#34;使用&#34; sqlConnection的子句,一旦到达结束就自行处理(使用(SqlConnection connection = new SqlConnection(connectionString)) {})