【问题标题】:Get Fields From not typed <Ienumerable>Object c# linq从未键入的<Ienumerable>Object c# linq获取字段
【发布时间】:2014-07-11 15:38:47
【问题描述】:

我想要在我的程序中返回一个 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,1] ??

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

【问题讨论】:

    标签: c# .net arrays linq ienumerable


    【解决方案1】:

    要获得特定值,您必须进行值转换,因此更改 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 所说的那样更改代码... :-)

    【讨论】:

      【解决方案2】:

      您可以为您的数据类添加一个接口。也就是说,如果您知道您希望在运行时获得的类型,那么您为什么要使用 IEnumerable&lt;object&gt; 呢?为什么不拥有三个独立的功能,每个功能都有一个明确的用途?这将是更好的面向对象设计,imo。

      【讨论】:

      • 谢谢你的回复,我应该用什么类型的? ,这只是大约 80 个 SQL 查询中的三个,我更喜欢你都在同一个函数中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-18
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多