获取匿名类型
本文关键字:类型 获取 | 更新日期: 2023-09-27 18:10:04
可能重复:
访问C#匿名类型对象
使用C#匿名类型
我使用linq-to-entities从一个有客户的表中获取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"的所有值,问题是我不知道如何做到这一点,因为每个项目都是匿名数据类型。有人能帮我吗?
匿名类型的作用域仅限于"声明"它的方法(好吧,它并不是真正声明的,但你明白我的意思了(。如果要在其他方法中使用查询结果,请创建一个命名类型来保存结果。
如果希望访问方法的属性,则不应该从方法中返回匿名类型。如果你定义一个类,你会更容易,因为它建立了你的方法的契约。
只需创建一个类来避免匿名类型。
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
来获得属性值。