在 datagridview 中排序和过滤 IQueryable

发布于 2025-01-01 00:09:51 字数 1036 浏览 1 评论 0原文

我有一个使用 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 属性,这是更有效的方法吗?在我的函数中返回其他类型会更好吗?

有任何建议欢迎提出

I have a query made using linq to SQL which result will be shown in a datagridview with sorting and filtering options.

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    ;
        }

Later in my code I set the datasource to use previous result.

var depositos = operaciones.RegresaDepositosBancarios();
dataGrid_depositos.DataSource = depositos;

As you can see I'm returning and IQueryable of anonymous type and I can't perform sorting or filtering over this. I read that you can implement a custom function to convert IQueryable to DataView and then use the RowFilter property, is this the more efficient way of doing it? Could be better to return other type in my function?

Any suggestions are welcome

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只为一人 2025-01-08 00:09:51

您应该将返回类型从 IQueryable 更改为 IEnumerable,然后您可以执行以下操作:

 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);
    }
}

}

You should change the return type from IQueryable to IEnumerable<dynamic>, then you can do something like:

 var over100 = RegresaDepositosBancarios()
    .Where(d => d.Monto > 100);

I think you could also code it this way (however I don't normally use from so am not sure)

 var over100 = from d in RegresaDepositosBancarios()
    where d.Montho > 100;

Here's a test program.

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);
    }
}

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文