linq where утверждение, для которого задано значение флажка - PullRequest
0 голосов
/ 20 июня 2020

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

Этот linq собирает некоторую статистику о базе данных mp3, и я построил его с помощью Naasking здесь

Удалось включить? : в предложении .where ie:

  var stats = from res in Globals.ds.Tables[0].AsEnumerable()
   .Where(x => checkBox1.Checked == false ? x.Field<string>("some_field") == "some_criteria" : 
   x.Field<string>("some_field") == "everything") 

Но моя проблема в том, что когда этот флажок установлен, это означает, что мне не нужен оператор .where, поскольку я использую все, в В этом примере «все» не является критерием, предполагается, что в нем вообще не должно быть критериев.

Есть ли способ получить эквивалент * в .where? в противном случае, как я могу справиться с этой ситуацией?

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 20 июня 2020

Вы можете пропустить .Where, если флажок не установлен

var query = Globals.ds.Tables[0].AsEnumerable();

if (checkBox1.Checked)
{
    query = query.Where(x => x.Field<string>("some_field")); 
}

var result = query.ToArray();
1 голос
/ 20 июня 2020

В предикате Where вы можете использовать x => true, чтобы сопоставить все. Мы можем объединить это понятие с альтернативной стороной троичного, обновив ваш пример следующим образом (обратите внимание, что я разбил запрос на две строки только для целей этого ответа):

var stats = Globals.ds.Tables[0].AsEnumerable();
 // pass "where true" as alternative 
var result = stats.Where(x => checkBox1.Checked == false ? x.Field<string>("some_field") == "whatever" : true);

После применения некоторых Для упрощения нашего логического логического c, это становится следующим:

var result = stats.Where(x => checkBox1.Checked || x.Field<string>("some_field") == "whatever");

Конечно, мы действительно когда-либо сделали бы что-то из этого, только если бы у нас была потребность для объединения логических проверок в один пункт. Потому что, в конце концов, where true - это то же самое, что вообще не применять никакой фильтрации:

var stats = Globals.ds.Tables[0].AsEnumerable();

if (!checkBox1.Checked)
{
   stats = stats.Where(x => x.Field<string>("some_field") == "whatever");
}
var result = stats.ToList();

Примечание : пример в вашем вопросе и простое объяснение на английском языке sh, которое вы предоставляете расходятся друг с другом. Не совсем ясно, означает ли проверка все или фильтрация. Этот ответ следует за примером - отмечен означает все. Если все наоборот (не отмеченное означает все), примеры будут выглядеть так:

// example 1
var result = stats.Where(x => checkBox1.Checked ? x.Field<string>("some_field") == "whatever" : true);
// example 2
var result = stats.Where(x => !checkBox1.Checked || x.Field<string>("some_field") == "whatever");
// example 3 (if statement only) 
if (checkBox1.Checked)
{
   stats = stats.Where(x => x.Field<string>("some_field") == "whatever");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...