Использование одного оператора LINQ с разными параметрами - PullRequest
2 голосов
/ 13 марта 2010

У меня довольно сложный оператор linq, к которому мне нужно получить доступ для разных методов. Каждому из этих методов может потребоваться просмотреть результирующие данные с различными параметрами. Для одного метода это может быть код проекта, для другого - язык. Утверждение в значительной степени то же самое, это просто часть, которая меняется.

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

Например (значительно упрощено):

var r = from c in  customer
        where c.name == "some name"

// or it may be 

var r = from c in customer
        where c.customerId == 8

Есть ли способ объединить оба этих слова в одно и то же утверждение, чтобы я мог использовать одно или другое в зависимости от того, что я делаю? Я попытался использовать оператор if, чтобы использовать одно из утверждений where или другое, и это не очень хорошо прошло.

Ответы [ 3 ]

3 голосов
/ 13 марта 2010

Вы можете сделать это так:

var r = from c in customer
        select c;

if (CustomerName != null)
  r = r.Where(c => c.name == CustomerName);
if (CustomerID != null)
  r = r.Where(c => c.customerId == CustomerID);

Вы можете сделать это else if, если только один из них будет применяться, в моем примере любые критерии, которые не были равны нулю, будут применены к запросу для фильтрации.

1 голос
/ 13 марта 2010

как насчет этого?

var useIdForFiltering = false;

var r = from c in customer
    where (useIdForFiltering && c.customerId == 8) || (c.name == "some name")
0 голосов
/ 13 марта 2010

Вы можете передать делегату Func вашей функции (предложение Where принимает делегат Func с логическим типом возврата). Затем используйте этот делегат в предложении Where.

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