Динамически создаваемое предложение Linq "where" - PullRequest
1 голос
/ 18 августа 2010

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

Вот псевдокод того, что я пытаюсь сделать:

list<t> searchTerms;

class t
{
string columnName;
string columnValue ;
string columnType ;
 string FilterType;
}

Я использую Linq to SQL для извлечения данных из моей базы данных и хотел бы создать предложение "where" сlist:

что-то вроде:

SearchTerm t = terms.Find(term => term.ColumnValue == "PartNo");
if (t != null)
{
  switch (t.FilterType)
  {
    case FilterType.Contains:
      q = q.Where(c => c.PartNo.Contains(t.Value));
      break;

    case FilterType.EqualTo:
      q = q.Where(c => c.PartNo.Equals(t.Value));
      break;

    case FilterType.StartsWith:
      q = q.Where(c => c.PartNo.StartsWith(t.Value));
      break;
  }
}

t = terms.Find(term => term.ColumnValue == "ItemDesc");
if (t != null)
{
  switch (t.FilterType)
  {
    case FilterType.Contains:
      q = q.Where(c => c.ItemDesc.Contains(t.Value));
      break;

    case FilterType.EqualTo:
      q = q.Where(c => c.ItemDesc.Equals(t.Value));
      break;

    case FilterType.StartsWith:
      q = q.Where(c => c.ItemDesc.StartsWith(t.Value));
      break;
  }
}

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

q.whereJoinExpression(searchTerms.ToLamdaExpression());

где searchTerms.ToLamdaExpression ()

должен вернуть мне вход для предложения where, то есть Expression>.и гдеJoinExpression должен получить тот же результат, что и

 q = q.Where(searchTerms.ToLamdaExpression());

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

1 Ответ

3 голосов
/ 18 августа 2010

Посмотрите на Dynamic Linq и Predicate Builder .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...