具有不同功能的linq问题

时间:2011-05-18 16:04:08

标签: linq

我正在尝试将不同的记录绑定到下拉列表。在我添加了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();

任何人都有解决方案吗?提前谢谢。

3 个答案:

答案 0 :(得分:4)

您已经在LINQ查询中选择Source,结果是IQueryable<string>。然后你指定Source作为在数据绑定中找到在每个字符串中的属性。只需取出更改数据绑定中DataTextFieldDataValueField属性的语句。

您可以删除查询中的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 }