从未键入的对象中获取字段c# linq

本文关键字:对象 获取 字段 linq Ienumerable | 更新日期: 2023-09-27 18:12:27

我想要一个方法在我的程序中返回linq查询的结果,下面是函数:

public static IEnumerable<object> ConsultasSQL(int TipoConsulta)
{       
    SQLDataContext DC = new SQLDataContext();
    IEnumerable<object> consulta = (dynamic)null;
    switch(TipoConsulta)
    {
        case 1: // Registro en Linea
             DC = SQLDataContext.GetDataContext("Tiendas", componerCS());
                  consulta = from tienda in DC.Tiendas
                  where tienda.Cod__Tienda == Globales.Tienda
                  select tienda;
            break;
        case 2:// Efectivo_Local
            DC = SQLDataContext.GetDataContext("Formas de Pago",componerCS());
                 consulta = from pagos in DC.Formas_de_Pago
                 where pagos.Efectivo_Local == 1
                 select pagos;
            break;
        case 3: // Productos
                 DC = SQLDataContext.GetDataContext("Item",componerCS());
                 consulta = from Productos in DC.Item
                 select Productos;
            break;
    }
   return consulta.ToList();
}

我在程序的其他地方像这样调用这个函数:

public static void Efectivo_local()
{
    var consulta = ConsultasSQL(3);
   // Globales.IdPagoLocal = consulta.First().ID_Pago;
   //Globales.DesriPagoLocal = consulta.First().ID_Pago;
}

代码工作,如果我把咨询作为一个Datagridview数据源,它会显示我的数据,但我有两个问题:

1 -如果我把datagridview1。datasource = consulta.first() ->它没有显示任何内容:(2 -我不知道如何检索consulta.tolist()的特定字段的值

如下图所示,consulta有144条记录,我想检索其中的字段1第二行,就像一个数组?(1) ? ?

https://i.stack.imgur.com/Qb349.jpg)

从未键入的<Ienumerable>对象中获取字段c# linq

要获得特定的值,必须对值进行强制转换,因此更改SQLDataContext:

private SQLDataContext DC = new SQLDataContext();
... 
public static IEnumerable<object> ConsultasSQL(int TipoConsulta)
{
    ...
}

并添加以下代码:

var consulta = ConsultasSQL(3) as List<DC.Item.Productos>;
if (consulta != null) {
   datagridview1.datasource = consulta.first();
   Globales.IdPagoLocal = consulta.Find(c => c.id == 123456).ID_Pago;
}

但是我建议你像Jeff Koch说的那样修改代码…: -)

可以在数据类中添加接口。也就是说,如果你知道你期望在运行时得到的类型,为什么还要使用IEnumerable<object>呢?为什么不使用三个独立的函数,每个函数都有一个明确的目的呢?在我看来,OO设计会更好。