获取匿名类型

本文关键字:类型 获取 | 更新日期: 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来获得属性值。