我使用linq to SQL进行查询,结果将显示在带有排序和过滤选项的datagridview中。
public IQueryable RegresaDepositosBancarios()
{
var depositos = from d in context.depositos_bancarios
where d.Aplicado == false
orderby d.FechaDeposito ascending
select new
{
d.IDDeposito,
d.cuentas_bancarias.Nombre,
d.Monto,
d.FechaDeposito,
d.Observaciones
};
return depositos ;
}
稍后在我的代码中,我将数据源设置为使用以前的结果。
var depositos = operaciones.RegresaDepositosBancarios();
dataGrid_depositos.DataSource = depositos;
正如您所看到的那样,我正在返回并且IQueryable是匿名类型,我无法对此进行排序或过滤。我读过你可以实现一个自定义函数将IQueryable转换为DataView然后使用RowFilter属性,这是更有效的方法吗?可以更好地在我的函数中返回其他类型吗?
欢迎任何建议
答案 0 :(得分:1)
您应该将返回类型从IQueryable
更改为IEnumerable<dynamic>
,然后您可以执行以下操作:
var over100 = RegresaDepositosBancarios()
.Where(d => d.Monto > 100);
我认为您也可以这样编码(但我通常不会使用from
,所以我不确定)
var over100 = from d in RegresaDepositosBancarios()
where d.Montho > 100;
这是一个测试程序。
using System;
using System.Collections.Generic;
using System.Linq;
namespace ClassLibrary1
{
public class Class1
{
public int A;
public int B;
}
public class Test
{
public static IEnumerable<dynamic> Build()
{
var list = new List<Class1>();
list.Add(new Class1() { A = 10, B = 100 });
list.Add(new Class1() { A = 200, B = 2000 });
return list
.OrderBy(e => e.B)
.Select(e => new { A1 = e.A, B2 = e.B });
}
public static IEnumerable<dynamic> Filter()
{
return Build()
.Where(e => e.A1 > 100);
}
static void Main()
{
foreach (dynamic e in Filter())
Console.WriteLine("A1={0}, B2={1}", e.A1, e.B2);
}
}
}