используя если еще с LINQ Где - PullRequest
       1

используя если еще с LINQ Где

1 голос
/ 10 сентября 2010

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

var test = from p in _db.test
           where if(str1 != null){p.test == str} else i dnt wanna check p.test

У меня есть около 14 параметров для предложения where

нужна помощь, спасибо

Ответы [ 5 ]

5 голосов
/ 10 сентября 2010

Вы можете сделать это пошагово:

// set up the "main query"
var test = from p in _db.test select _db.test;
// if str1 is not null, add a where-condition
if(str1 != null)
{
    test = test.Where(p => p.test == str);
}
1 голос
/ 10 сентября 2010

Рассмотрим параметры param1 и param2. Ваш запрос должен быть как под:

string param1 = "Value1";
string param2 = "Value2";

var q = from bal in context.FxBalanceDetails
        where (string.IsNullOrEmpty(param1) || bal.Column1 == param1)
               && (string.IsNullOrEmpty(param2) || bal.Column2 == param2)
        select bal;

Это обеспечит применение условия where для определенного параметра только в том случае, если он не равен нулю.

1 голос
/ 10 сентября 2010

В дополнение к ответу @ Fredrik, вы также можете использовать правила короткого замыкания при оценке логических выражений, например, так:

var test = from p in _db.test
           where str1 == null || p.test == str1;

Редактировать Если у вас есть много строк для проверки, (str1, str2 и т. Д.), Затем вы можете использовать следующее, которое будет переведено в предложение SQL IN:

var strings = new List<string>();
if (str1 != null) strings.Add(str1);
if (str2 != null) strings.Add(str2);
if (str3 != null) strings.Add(str3);
...

var test = from p in _db.test
           where strings.Contains(p.test);

Еще проще, если ваши строкиуже в коллекции (которая, если у вас есть 14 из них, я предполагаю, что они будут ...)

0 голосов
/ 06 марта 2012
var test = 
from p in _db.test
where p.str1 != null ? p.str1 : ""
select p;
0 голосов
/ 14 сентября 2010

Вы проверяете строки в одном поле сущности? Если это так, вы можете написать что-то вроде:

var strings = new[] { "foo", "bar", "ok", "", null };
var query = dataContext.YourTable.AsQueryable();
query = strings.Where(s => !string.IsNullOrEmpty(s))
       .ToList()
       .Aggregate(query, (q, s) => q.Where(e => e.YourField == s));

EDIT: Предыдущее решение слишком сложное:

var strings = new[] { "foo", "bar", "ok", "", null }.Where(s => !string.IsNullOrEmpty(s))
       .ToList();
var query = dataContext.YourTable.Where(e => strings.Contains(e.YourField));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...