我有遗留代码,我正在慢慢转向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();
}
答案 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);