我想在我的程序中返回一个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] ??
答案 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说......: - )