使用LINQ填充DropDownList的正确方法是什么?

jor*_*ame 2 c# linq asp.net linq-to-sql

我知道这个问题可能重复,但我看了很多例子,但没有一个适合我的情况.

我在DataList中有一个DropDownList,我需要使用来自DB的数据填充DropDownList.我知道如何在DataList中找到下拉控件,我知道如何使用SqlCommand填充下拉列表.现在我正在尝试学习LINQ,但我无法填写下拉列表.请参阅下面的我的场景:

        //Scenario 1
        var ddquery = from dd in db.PRODUCTs select dd.pr_product.Distinct();

        product.DataSource = ddquery;                
        product.DataTextField = "pr_product";
        product.DataValueField = "pr_product";
        product.DataBind();
Run Code Online (Sandbox Code Playgroud)

在场景1中,我得到错误:"类型'System.String'不支持序列运算符."

        //Scenario 2
        var ddproc = from dd in db.isp_GETDDL("PRODUCTS", "", "") select dd;

        product.DataSource = ddproc;
        product.DataTextField = "pr_product";
        product.DataValueField = "pr_product";
        product.DataBind();
Run Code Online (Sandbox Code Playgroud)

在场景2中,我得到错误:"DataBinding:'isp_GETDDLResult'不包含名为'pr_product'的属性." 在这种情况下我不是真的,如果我正在做正确的,因为PROC返回一组数据,但我不确定我是否正确处理.

        //Scenario 3
        var ddq = from dd in db.PRODUCTs select dd;

        product.DataSource = ddq;
        product.DataTextField = "pr_product";
        product.DataValueField = "pr_product";
        product.DataBind();
Run Code Online (Sandbox Code Playgroud)

在场景3中,我得到与2中相同的错误,但在这一个上我没有使用PROC来获取数据.

任何帮助将不胜感激.

Mar*_*zek 5

看起来您的Distinct调用应该是查询本身,而不是结果中的一个值:

var ddquery = (from dd in db.PRODUCTs select dd.pr_product).Distinct().ToList();
Run Code Online (Sandbox Code Playgroud)

什么更重要,你不必指定DataTextFieldDataValueField,因为你的DataSourceList<string>:

product.DataSource = ddquery;                
product.DataBind();
Run Code Online (Sandbox Code Playgroud)