我想使用linq填充数据库中的值和常量硬编码文字的下拉列表。例如,假设我已经有northwind datacontext,我想用类别表和一些常量填充下拉列表,以便下拉列表具有类似下面的内容。
0 [全部] -1 [无] 1饮料 2调味品 3个甜点 :: 8海鲜
等等。前两项是硬编码常量,其余项目来自使用linq的数据库。
我尝试了这个,但没有奏效。请帮忙。感谢。
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim db As New NorthwindDataContext
Dim q = From c In db.Categories _
Select c.CategoryID, c.CategoryName
Dim q2 = From c In db.Categories _
Select CategoryID = 0, CategoryName = "All"
DropDownList1.DataTextField = "CategoryName"
DropDownList1.DataValueField = "CategoryID"
DropDownList1.DataSource = q.Union(q2)
DropDownList1.DataBind()
End Sub
我想用LINQ来实现这一目标。是的,您可以添加到DropdownList但是......
答案 0 :(得分:2)
试试(extraCats表达式是一个内联数组声明,使用c#语法)
Dim db As New NorthwindDataContext
Dim q = From c In db.Categories _
Select c.CategoryID, c.CategoryName
Dim dbCats = q.ToList()
Dim extraCats = new[] {
new { CategoryID = 0, CategoryName = "All" }
}
DropDownList1.DataTextField = "CategoryName"
DropDownList1.DataValueField = "CategoryID"
DropDownList1.DataSource = dbCats.Union(extraCats)
DropDownList1.DataBind()
答案 1 :(得分:1)
您不必使用LINQ将这些项添加到DropDown ...绑定控件后使用DropDownList.Items.Add()或DropDownList.Items.Insert()
由于您想在列表的开头添加硬编码项,因此Insert()会更适合您。
有关详细信息,请参阅this article
答案 2 :(得分:0)
您只需将硬编码值添加到下拉列表中,将AppendDataBoundItems属性设置为true,然后将数据源设置为正常。
DropDownList1.Items.Add(New ListItem("0", "All"))
DropDownList1.AppendDataBoundItems = True
DropDownList1.DataTextField = "CategoryName"
DropDownList1.DataValueField = "CategoryID"
DropDownList1.DataSource = q
DropDownList1.DataBind()