C#: 如何从LINQ查询中设置ComboBox的ValueMember

5

好的,我有一个下拉框,它的数据源是一个 LINQ 查询的结果。

//load QA names
            var qaNames =
                from a in db.LUT_Employees
                where a.position == "Supervisor" && a.department == "Quality Assurance"
                select new { a, Names = a.lastName + ", " + a.firstName };

            cboQASupervisor.DataSource = qaNames;
            cboQASupervisor.DisplayMember = "Names";

我遇到的问题是,当我尝试添加下一行代码时。
cboQASupervisor.ValueMember = "ID";

我在运行时遇到了一个错误,它无法转换匿名类型。如何解决这个问题?

更正:

无法绑定到新值成员。 参数名称:value

2个回答

12
你将ID指定为值字段,但匿名类型中没有ID属性。
假设你在LUT_Employees对象中有ID:

var qaNames = (
    from a in db.LUT_Employees
    where a.position == "Supervisor" && a.department == "Quality Assurance"
    select new { a.ID, Names = a.lastName + ", " + a.firstName })
    .ToList();

cboQASupervisor.DataSource = qaNames;
cboQASupervisor.DisplayMember = "Names";
cboQASupervisor.ValueMember = "ID";

1
你需要在匿名类型中指定属性名称。 -> "new { ID = a.ID, " - Michael
@Sinaesthetic - 已检查 - 添加了ToList()函数 - Alex Aza
太好了。我想属性名称是由列名隐含的。 - Sinaesthetic
@Michael - 不需要指定属性名称,如果属性名称相同。 - Alex Aza
@Alex ToList() 对我没有任何作用,但添加 ID = a.ID 却有效。 - Sinaesthetic
显示剩余3条评论

2
您可以尝试这个:
       var qaNames =
       from a in db.LUT_Employees
       where a.position == "Supervisor" && a.department == "Quality Assurance"
        select new { Id = a.ID,  Names = a.lastName + ", " + a.firstName };

        cboQASupervisor.DataSource = qaNames.ToList();
        cboQASupervisor.DisplayMember = "Names";
        cboQASupervisor.ValueMember = "Id";

在数据源行中添加.ToList()到你的代码。

你确定吗?你的异常是什么?你添加了 .ToList() 吗? - Peyton Crow
异常完全相同。 - Sinaesthetic
现在我明白了,你使用ID而不是Id,而我的代码使用的是Id,你实际上并没有将其更改为Id,无论如何,很高兴你成功了。 - Peyton Crow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接