powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ-Вопрос господину Гу и господину Зы: "Что делать если всё плохо?"
2 сообщений из 27, страница 2 из 2
LINQ-Вопрос господину Гу и господину Зы: "Что делать если всё плохо?"
    #35134818
Bill Great
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
зы
зная что ничерта ты не найдешь и не напишешь, решил сам потренироваться на практике. Вот тебе ниже работающий пример для примерно твоего контекста. Наверняка можно и лучше написать, но основная идея должна быть понятна

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
static Dictionary<string, Func<object, Func<Person, bool>>> expressions = 
	new Dictionary<string, Func<object, Func<Person, bool>>>() 
{
	{"first", (p) => ((a) => a.FirstName == p.ToString())},
	{"last", (p) => ((a) => a.LastName == p.ToString())},
	{"position", (p) => ((a) => a.Position == p.ToString())}
};


Удивительное открытие - эта штука фильтрует на клиенте! Делаем Customer словарик выражений фильтрации
Код: plaintext
1.
2.
3.
4.
5.
6.
 Dictionary<string, Func<object, Func<Customer, bool>>> filterExpressions =
    new Dictionary<string, Func<object, Func<Customer, bool>>>() 
{
	{"CompanyName", (p) => ((customer) => customer.CompanyName.Contains( p.ToString()))},
	{"ContactName", (p) => ((customer) => customer.ContactName.Contains(p.ToString()))},
	{"Country", (p) => ((customer) => customer.Country.Contains( p.ToString()))}
};
создаём фильтр
Код: plaintext
1.
2.
3.
4.
var conditions = new[]{
                new {field ="CompanyName", value="Ch"},
                  new {field ="Country", value="n"}
            }

Фильтруем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
  

            foreach (var cond in conditions)
            {
                query = query.Where(filterExpressions[cond.field](cond.value));

            }
            bindingSource1.DataSource = query;
Смотрим в SQL Propfiler и о УЖОС! Запрос на сервере без where!!!
...
Рейтинг: 0 / 0
LINQ-Вопрос господину Гу и господину Зы: "Что делать если всё плохо?"
    #35136138
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
блииин, какой же ты нафиг утомительный. А подумать, поразмыслить мозгом? не умеем? Смотри за моей левой рукой - я добавил одно слово и поменял второе:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
class Person
{
	public string FirstName { get; set; }
	public string LastName { get; set; }
	public string Position { get; set; }
}

static List<Person> _persons = new List<Person>() {
	new Person() { FirstName = "Ivan", LastName="Ivanov", Position="Manager" },
	new Person() { FirstName = "Maxim", LastName="Ivanov", Position="Employee" },
	new Person() { FirstName = "Maxim", LastName="Petrov", Position="Employee" }
};

static Dictionary<string, Func<object, Expression<Func<Person, bool>>>> expressions = 
	new Dictionary<string, Func<object, Expression<Func<Person, bool>>>>() 
{
	{"first", (p) => ((a) => a.FirstName == p.ToString())},
	{"last", (p) => ((a) => a.LastName == p.ToString())},
	{"position", (p) => ((a) => a.Position == p.ToString())}
};

static void TestExpressions()
{

	var conditions = new[] {
		new { Field = "first", Value = "Maxim" },
		new { Field = "position", Value = "Employee" }
	};

	var q = _persons.AsQueryable();
	foreach (var cond in conditions)
	{
		q = q.Where(expressions[cond.Field](cond.Value));
	}
	foreach (var res in q)
	{
		Console.WriteLine("{0} {1} - {2}", res.FirstName, res.LastName, res.Position);
	}
	Console.ReadKey();
}
...
Рейтинг: 0 / 0
2 сообщений из 27, страница 2 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / LINQ-Вопрос господину Гу и господину Зы: "Что делать если всё плохо?"
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]