Сортировка и фильтрация IQueryable в datagridview - PullRequest
0 голосов
/ 31 января 2012

У меня есть запрос, выполненный с использованием linq to 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, это более эффективный способ сделать это? Может быть лучше вернуть другой тип в моей функции?

Любые предложения приветствуются

1 Ответ

1 голос
/ 31 января 2012

Вы должны изменить тип возврата с 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);
    }
}

}
...