Игра с объектным запросом "pattern" в C# и деревьях выражений

Я играю с базовой реализацией "шаблона" Query Object (в кавычках, поскольку это реализация шаблона интерпретатора), и я думал об усовершенствовании, которое я не знаю, как реализовать.

Как вы знаете, объект Criterion будет выглядеть примерно так:

public class Criterion
{
  ...
  string FieldName { get; set; }
  string Value { get; set; }
  ....
}

Что мне не нравится, так это то, что я должен добавить поле в строку, поэтому я подумал, смогу ли я создать какой-нибудь универсальный класс Criterion, чтобы я мог использовать его следующим образом:

var criterion = new Criterion<Person>();
criterion.Field = c => c.FirstName;
criterion.Value = "John";

Или что-то вдоль этих линий.

Конечно, есть также часть, где критерии должны быть преобразованы в SQL, чтобы я мог сделать что-то вроде:

string query = "SELECT * FROM Person WHERE " + criteria.Field.ToString() + " = '" + criteria.Value + "'"

Я уверен, что должен быть способ сделать это, но я просто не могу обернуть голову вокруг этого.

Спасибо за вашу помощь.

1 ответ

Решение

Вы можете довольно легко сделать это с помощью выражений. В этой статье есть пример - Получить имя и тип свойства с помощью лямбда-выражения

Другие вопросы по тегам