使用Entity-Framework时是否可以从查询中返回字符串值?

时间:2016-05-20 10:38:31

标签: c# mysql wpf entity-framework

到目前为止,我知道两种查询数据库的方法。其中一个是使用MySQL的库;通过声明“MySqlCommand”,“MySqlDataReader”,“MySqlConnection”并使用内置方法。

另一个是通过使用实体框架(这是我的首选选项)。

然而,我对这个后来的方法遇到了一些问题。我个人认为我缺乏知识。似乎在向最终用户传送数据时,Entity-Framework倾向于ObservableCollection<>或列表<>。

对我来说,这意味着在View中,我将使用Datagrid或List控件。通常这没关系。

但是,如果我不想在混合中使用数据网格控件会发生什么?如果我想在文本框中传达查询的结果怎么办?如何在不牺牲实体框架使用的情况下执行以下操作?它甚至可能吗?

        string config = "server=localhost; userid = root; database = databaseName";
        MySqlConnection con = new MySqlConnection(config);

        MySqlDataReader reader = null;

        // Run the select query
        string query = "SELECT * FROM students WHERE id = " +id;

        MySqlCommand command = new MySqlCommand(query, con);
        con.Open();
        reader = command.ExecuteReader();

        while (reader.Read())
        {
            // Put the results in the appropriate strings so I can databind them
            string studentName = (string)reader["studentName"];

            string studentNum = (string)reader["studentNum"];

            .....
        }
        con.Close();

我如何利用实体框架来做到这一点?

2 个答案:

答案 0 :(得分:4)

此SQL查询的EF等效项:

// note, that this leads to SQL injections,
// use parametrized queries instead!
"SELECT * FROM students WHERE id = " +id

将是:

var student = context.Students.Find(id) // this will lookup local data as well

或:

var student = context.Students.Single(_ => _.Id == id)

两者都将返回单个Student实例,而不是序列/集合,您可以将UI绑定到其属性或像往常一样访问它们:

student.StudentName

答案 1 :(得分:3)

尝试类似的事情:

public static Studens GetStudent(int id)
{    
    return context.Studens.SingleOrDefault(x=>x.Id == id);
}