>我正在尝试将不同的记录绑定到下拉列表。在我添加了 linq 查询的不同函数后,它说"数据绑定:'System.String' 不包含名为 '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();
有人有解决方案吗?提前谢谢你。
您已经在 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();
}
查询表达式非常适合复杂的查询,但是当您只有一个选择或 where 子句和一个简单的投影时,使用点表示法更简单 IMO。
您正在尝试绑定字符串,而不是促销对象...和字符串没有源属性/字段
您的方法返回一组字符串,而不是一组具有属性的对象。
如果确实要绑定到属性名称,则需要一组具有属性的对象(例如,通过编写select new { Source = Source }
)