LINQ: как добавить несколько переменных в запрос LINQ? - PullRequest
2 голосов
/ 08 июля 2011

У меня есть действие контроллера под названием List, которое принимает следующие параметры

int Filer, int Field, int Operator, строка QueryValue

public enum Filter
{
    ActiveEmployee,
    OnHoldEmployee,
    InactiveEmployee
}
public enum Field
{
    Name,
    ABRAID,
    JobTitle,
    LocationCode,
    Department
}
public enum Operator
{
    Contains,
    StartWith,
    EndWith,
    EqualTo
}

Возможные случаи:

Select employee where Name Equals "Value"

Select employee where Name EndWith with "Value"

Select employee where Name StartWith with "Value"

Select employee where JobTitle Contains "Value"

Select employee where Department Equals "Value"

Я использую LINQ для запроса базы данных

Employees = from p in DB.Employees
            where p.AWCID.Contains(queryvalue)
            select p;

Но это значит, что я должен иметь дело с вложенным переключателем, чтобы покрыть все случаи. Это более 180 строк кода для покрытия 3 переменных,

Я не очень осведомлен о синтаксисе LINQ для поддержки нескольких значений.

Есть мысли? Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 июля 2011

Предполагая, что запрос будет только одного типа запроса (содержит, начинается с и т. Д.), Я бы попробовал что-то вроде этого:

public IQueryable<Employee> GetEmployees(queryType, value)
{
    var Employees = from p in DB.Employees
            select p;

    // could use a switch statement here as well
    if (queryType == "contains")
        return Employees.where(e => e.contains(value));
    else if...
}

Вы также можете сделать типы запросов перечислением.

0 голосов
/ 08 июля 2011

Это усложняет запрос. Если вы используете Entity Framework, вы можете рассмотреть Entity SQL, который будет гораздо менее сложным, поскольку вы можете динамически построить весь запрос в виде строки. Или LINQ to SQL имеет Dynamic LINQ, который также поддерживает текстовые запросы ...

...