MVC 3传统数据库或数据集到下拉列表

时间:2012-07-31 15:57:10

标签: c# sql asp.net-mvc ms-access

我有遗留代码,我正在慢慢转向C#MVC。如何从数据表或数据集创建下拉列表?我不想创建属性并循环遍历列表,因为我有太多古老的MS Access查询要处理。

控制器:

 using (SqlConnection Connection = new SqlConnection(ConnectionString))
        {
            string commandstring = "select column1 from table1";
            SqlCommand command = new SqlCommand(commandstring, Connection);
            Connection.Open();
            SqlDataAdapter da = new SqlDataAdapter();
            DataSet ds = new DataSet();
            da.SelectCommand = command;
            da.Fill(ds, "data1");
            Connection.Close();
        }

1 个答案:

答案 0 :(得分:1)

正如George所说,我建议将域逻辑移动到数据访问层,并使用实体来保存从查询返回的对象。您可以使用Dapper,它允许您使用原始SQL查询并将结果映射到模型。其性能与SqlDataReader相同。这是一个扩展方法,它将获取模型列表并将它们转换为下拉列表。

public static IEnumerable<SelectListItem> ToSelectList<T, TTextProperty, TValueProperty>(this IEnumerable<T> instance, Func<T, TTextProperty> text, Func<T, TValueProperty> value, Func<T, bool> selectedItem = null)
{
    return instance.Select(t => new SelectListItem
    {
        Text = Convert.ToString(text(t)),
        Value = Convert.ToString(value(t)),
        Selected = selectedItem != null ? selectedItem(t) : false
    });
}

然后你可以使用像......这样的代码。

var list = SomeQuery();
list.ToSelectList(x => x.Name, x => x.id, x => x.id == selectedId);