可能重复:
Accessing C# Anonymous Type Objects
Working with C# Anonymous Types
我正在使用linq来实体从客户表中获取id和全名。
public IQueryable RegresaClientesPorEmpresa(int id_emp)
{
var clientes = from c in context.clientes
where c.IDEmpresa == id_emp
select new
{
c.IDCliente,
NomComp = c.Nombres +" "+ c.ApellidoP +" "+ c.ApellidoM
};
return clientes;
}
结果用作组合框的数据源,然后在我的组合中触发SelectionChangeCommitted时,我希望将所选项添加到列表框中:
var clientes = operaciones.RegresaClientesPorEmpresa(2);
combo_cliente.DataSource = clientes;
combo_cliente.DisplayMember = "NomComp";
combo_cliente.ValueMember = "IDCliente";
listBox_grupo.DisplayMember = "NomComp";
listBox_grupo.ValueMember = "IDCliente";
private void combo_cliente_SelectionChangeCommitted(object sender, EventArgs e)
{
listBox_grupo.Items.Add(combo_cliente.SelectedItem);
}
直到这里一切都很好。最后,我希望从列表框中添加的所有项目中获取所有“IDCliente”的值,问题是我不知道如何操作,因为每个项目都是匿名数据类型。任何人都可以帮助我吗?
答案 0 :(得分:4)
匿名类型的范围仅限于“声明”它的方法(好吧,它没有真正声明,但你明白我的意思)。如果要在另一个方法中使用查询结果,请创建一个命名类型来保存结果。
答案 1 :(得分:2)
如果您希望访问其属性,则不应从方法中返回匿名类型。如果你定义一个类,那么对你来说会更容易,因为这会建立你的方法的契约。
答案 2 :(得分:1)
只需创建一个类以避免匿名类型。
class Foo
{
public string NomComp {get ; set;}
public string IDCliente {get ; set;}
}
并做
select new Foo
{
...
}
省去一些麻烦。
或您可以定义
T Cast<T>(object obj, T type)
{
return (T)obj;
}
然后使用
object anonymousObject = GetSelection();
var selection = Cast(anonymousObject , new { IDCliente="", NomComp ="" });
然后您应该能够selection.NomComp
获取属性值。