2015-02-24 109 views
-1

我想創建動態LINQ查詢C#動態LINQ查詢EF C#

我谷歌搜索很多,但沒有得到確切的解決方案

我有候選人有以下字段(列數)
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 – 2015-02-24 11:43:17

回答

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 Contains在answerList中的所有候選人。

0

我面臨着同樣的在開發庫存搜索窗口時出現問題。我也在網上搜索了很多,但沒有成功。我已經解決了這個問題如下。

下面是我的搜索窗口:

enter image description here

在這裏你可以看到,有6個組合框和每個有四個選項,如:

<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查詢使用哪裏超過一個領域動態.. – 2015-02-25 09:08:12

+0

不,你必須在案件的基礎上寫條件的地方。這是我曾發佈有關此原始文章http://stackoverflow.com/questions/23557509/use-dynamic-linq-library-with-join – Sunny 2015-02-26 04:26:00

+0

有解決方案使用「System.Linq.Dynamic」感謝Sunny。 – 2015-02-27 11:52:36