LINQ to SQL:关于常量值的联合

时间:2009-04-02 20:12:15

标签: linq

我想使用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但是......

3 个答案:

答案 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()