2015-02-24 11 views
-1

Я хочу создать динамические запросы LINQ в C#Динамические Linq запросы EF с #

Я прибегая к помощи много, но не получить точное решение

У меня есть кандидат со следующим полем (перечислено несколько)
CandidateId
JobTitleId
CityId
DepartmentID

Я хочу создать Linq запрос с динамическими данными, как

var idArray=[1,2,3,4] 
var fieldName='CityId' (may be any other of candidate Table) 

мне нужен динамический запрос как candidateCityId (или другие) Содержит в IdArray

У меня более 50 поля в кандидате таблице, так что это не возможно, чтобы написать для каждого поля

+1

Это может помочь http://weblogs.asp.net/scottgu/dynamic-linq-part-1-using-the-linq-dynamic-query-library –

ответ

0
 
var answerList = new List(){1,2,3,4};//from DB 
var fieldName= FieldDBPath; //from db //eg. CandidateId
var queryableData = _dbEntities.Candidates.Where("@0.Contains(outerIt."+fieldName + ")", answerList).ToList();

Это означает, что он отображает всех кандидатов с помощью CandidateId Содержит в answerList.

0

Я столкнулся с тем же при разработке окна поиска для инвентаря. Я также много искал в Интернете, но не успел. Я решил эту проблему, как показано ниже.

Ниже окно для моего поиска:

enter image description here

Здесь вы можете увидеть, что есть 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.

Надеюсь, это вам поможет.

+0

Но могу ли я написать запрос linq, используя где с более чем одно поле динамически .. –

+0

Нет, вам нужно написать где условие на основе случаев. Это оригинальная публикация, в которой я писал об этом http://stackoverflow.com/questions/23557509/use-dynamic-linq-library-with-join – Sunny

+0

Получил решение, используя «System.Linq.Dynamic» благодаря Sunny. –

Смежные вопросы