在datagridview中对IQueryable进行排序和筛选
本文关键字:排序 筛选 datagridview 中对 IQueryable | 更新日期: 2023-09-27 18:22:00
我使用linq对SQL进行了一个查询,结果将显示在带有排序和筛选选项的数据网格视图中。
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属性,这是更有效的方法吗?在我的函数中返回其他类型会更好吗?
欢迎任何建议
您应该将返回类型从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);
}
}
}