我正在尝试将不同的记录绑定到下拉列表。在我添加了linq查询的不同功能之后,它说“DataBinding:'System.String'不包含名为'Source'的属性。”我可以保证该列名是'Source'。在进行不同的搜索时,该名称是否会丢失?
我的后端代码:
public IQueryable<string> GetAllSource()
{
PromotionDataContext dc = new PromotionDataContext(_connString);
var query = (from p in dc.Promotions
select p.Source).Distinct();
return query;
}
前端代码:
PromotionDAL dal = new PromotionDAL();
ddl_Source.DataSource = dal.GetAllSource();
ddl_Source.DataTextField = "Source";
ddl_Source.DataValueField = "Source";
ddl_Source.DataBind();
任何人都有解决方案吗?提前谢谢。
答案 0 :(得分:4)
您已经在LINQ查询中选择Source
,结果是IQueryable<string>
。然后你还指定Source
作为在数据绑定中找到在每个字符串中的属性。只需取出更改数据绑定中DataTextField
和DataValueField
属性的语句。
您可以删除查询中的p.Source
预测并返回IQueryable<Promotion>
- 然后您将获得不同的促销而不是不同的来源
另一个快速注释 - 使用查询语法并不能真正帮助您进行GetAllSources
查询。我只想把它写成:
public IQueryable<string> GetAllSource()
{
PromotionDataContext dc = new PromotionDataContext(_connString);
return dc.Promotions
.Select(p => p.Source)
.Distinct();
}
查询表达式非常适合复杂的查询,但是当你只有一个select或where子句和一个简单的投影时,使用点符号更简单的IMO。
答案 1 :(得分:2)
您正在尝试绑定字符串,而不是Promotion对象...并且字符串没有Source属性/字段
答案 2 :(得分:1)
您的方法返回一组字符串,而不是一组具有属性的对象。
如果您真的想要绑定到属性名称,则需要一组具有属性的对象(例如,通过编写select new { Source = Source }
)