Я столкнулся с тем же при разработке окна поиска для инвентаря. Я также много искал в Интернете, но не успел. Я решил эту проблему, как показано ниже.
Ниже окно для моего поиска:
Здесь вы можете увидеть, что есть 6 ComboBoxes и имеют четыре варианта, как:
<ComboBoxItem IsSelected="True">Contains</ComboBoxItem>
<ComboBoxItem>Does Not Contain</ComboBoxItem>
<ComboBoxItem>Begins With</ComboBoxItem>
<ComboBoxItem>Ends With</ComboBoxItem>
Я решил эту проблему, сохраняя выбор и значение в списке как:
public class FilterList
{
public string combobox { get; set; }
public string value { get; set; }
}
На кнопке поиска нажмите:
List<FilterList> filter = new List<FilterList>();
filter.Add(new FilterList { combobox = cmbPart.Text, value = txtPart.Text });
filter.Add(new FilterList { combobox = cmbDescription.Text, value = txtDescription.Text });
filter.Add(new FilterList { combobox = cmbVendor.Text, value = txtVendor.Text });
filter.Add(new FilterList { combobox = cmbVendorPart.Text, value = txtVendorPart.Text });
filter.Add(new FilterList { combobox = cmbManufacture.Text, value = txtManufacture.Text });
filter.Add(new FilterList { combobox = cmbManuPartNumber.Text, value = txtManuPartNumber.Text });
Сейчас в списке есть все критерии поиска по значению. Теперь мне нужно фильтровать запись из базы данных. Для этого первый я выбрать все записи из базы данных, а затем с помощью переключателя согласно списку элементов, как:
if (!string.IsNullOrEmpty(filter[0].value))
{
switch (filter[0].combobox)
{
case "Contains":
break;
case "Does Not Contain":
break;
}}
if (!string.IsNullOrEmpty(filter[1].value))
{
switch (filter[1].combobox)
{
case "Contains":
//code
}}
в тех случаях, вы можете использовать различные запросы в списке, который получил из базы данных.
В целом вы можете сказать, что невозможно создать запрос времени выполнения в linq, как мы можем это сделать в sql.
Надеюсь, это вам поможет.
Это может помочь http://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library –