使用asp:Label / asp:TextBox访问IQueryable的内容

时间:2011-10-05 13:28:36

标签: asp.net linq iqueryable

我正在尝试使用asp:Label获取IQueryable的内容。我有以下代码 -

在DAL中:

public class ProdDetails
    {
        public string CustPartNo { get; set; }
        public string PartName { get; set; }
        public double Price { get; set; }
    }

public static IQueryable<ProdDetails> GetProductDetails(string prodID, string custID)
    {
        var db = new CCFSQLEntities();
        return
            from pd in db.PRODUCTs
            join pc in db.PRICEs
                on pd.CODE equals pc.CODE
            where pd.CODE == prodID && pc.ACCOUNT_NO == custID
            select new ProdDetails
            {
                CustPartNo = pc.CUSTOMER_PART_NO,
                PartName = pd.DESC,
                Price = pc.CURRENT_PRICE.Value
            };
    }

在代码隐藏页面中:

    protected void TFProductCodeDropDown_SelectedIndexChanged(object sender, EventArgs e)
    {
    //code that will get the customer product number, name & price

        string selProduct = TFProductCodeDropDown.SelectedValue;
        string selCustomer = CustomerDropDown.SelectedValue;

        IQueryable<ccfDbAccess.ProdDetails> prodDetails = ccfDbAccess.GetProductDetails(selProduct, selCustomer);
        CustomerPartNoLabel.Text = prodDetails.CustPartNo; // column name
        PartNameLabel.Text = prodDetails.PartName;
        PriceTextBox.Text = prodDetails.Price.ToString();

        //this gridview works
        TestGridView.DataSource = ccfDbAccess.GetProductDetails(selProduct, selCustomer);
        TestGridView.DataBind();

    }

使用查询,只能返回一行数据。上面的gridview显示行正常,但Label.Text行产生错误 'System.Linq.IQueryable'不包含'CustPartNo'的定义,并且没有可以找到接受类型为'System.Linq.IQueryable'的第一个参数的扩展方法'CustPartNo'(您是否缺少using指令或汇编参考?)'

我对此比较陌生,所以如果需要编写任何代码,我将非常感激。我已经在这里看了一些相关的答案,但还没有成功地做任何工作。

1 个答案:

答案 0 :(得分:1)

我猜您尝试显示属性名称但是您正在尝试访问属性值。此外,这些属性属于ProdDetails类,而不属于您从数据层返回的IQueryable<ProdDetails>(这就是您获得的原因)例外)。您只需为这些标签指定字符串即可。

protected void TFProductCodeDropDown_SelectedIndexChanged(object sender, EventArgs e)
{
    //code that will get the customer product number, name & price
    string selProduct = TFProductCodeDropDown.SelectedValue;
    string selCustomer = CustomerDropDown.SelectedValue;

    ProdDetails prodDetails=ccfDbAccess.GetProductDetails(selProduct, selCustomer).FirstOrDefault();
    CustomerPartNoLabel.Text = prodDetails.CustPartNo; // column name
    PartNameLabel.Text = prodDetails.PartName;
    PriceTextBox.Text = prodDetails.Price.ToString();

    //this gridview works
    TestGridView.DataSource = ccfDbAccess.GetProductDetails(selProduct, selCustomer);
    TestGridView.DataBind();
}

<强>更新

我刚看到你的编辑。如果您想要查询单个结果,可以使用注释中建议的FirstOrDefault()函数。我更新了代码,但在标签上显示了第一个值,然后在gridview中显示其余部分可能不是您要查找的内容。