从未键入的字段<ienumerable> Object c#linq </ienumerable>获取字段

时间:2014-07-11 15:38:47

标签: c# .net arrays linq ienumerable

我想在我的程序中返回一个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;
}

代码有效,如果我将consulta作为Datagridview数据源,它会向我显示数据,但我有两个问题:

1 - 如果我把datagridview1.datasource = consulta.first() - &gt;它没有告诉我:( 2 - 我不知道如何检索consulta.tolist()

的特定字段的值

正如你在下面的图片中看到的,consulta有144条记录,我想要检索字段1 第二行,它的像和数组? [1,1] ??

http://i.imgur.com/5xHe8Hi.jpg

2 个答案:

答案 0 :(得分:0)

您可以为数据类添加接口。也就是说,如果您知道您希望在运行时获得的类型,为什么要使用IEnumerable<object>?为什么不有三个单独的功能,每个功能都有一个明确的目的?这将是更好的OO设计,imo。

答案 1 :(得分:0)

要获取特定值,您必须执行值转换,因此请更改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说......: - )