从未键入的对象中获取字段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)
要获得特定的值,必须对值进行强制转换,因此更改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设计会更好。