我正在尝试使用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指令或汇编参考?)'。
我对此比较陌生,所以如果需要编写任何代码,我将非常感激。我已经在这里看了一些相关的答案,但还没有成功地做任何工作。
答案 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中显示其余部分可能不是您要查找的内容。