2016-09-27 38 views
0

我有3個搜索文本框值。我需要檢查每個變量的string.isnullorEmpty,並且必須與linq查詢進行比較。如何在沒有多條件的情況下使用linq查詢生成條件

我的文本值:

  1. 廠商

  2. 項目代碼

  3. PARTNO

條件:

  1. 如果我搜索如果我進入3倍框中的值,我應該得到的結果

  2. 如果我輸入任何2的話,我應該得到的結果,我應該得到的結果

  3. 上述中的任何一個。

我的代碼如下

if (!string.IsNullOrEmpty(manufacturer)) 
     { 
      var filteredResult = _entity.MaterialMasters.Where(x => x.Manufacturer == manufacturer); 
     } 
if (!string.IsNullOrEmpty(projectcode)) 
     { 
      var filteredResult = _entity.MaterialMasters.Where(x => x.ProjectCode== projectcode); 
     } 
if (!string.IsNullOrEmpty(part)) 
     { 
      var filteredResult = _entity.MaterialMasters.Where(x => x.Part== part); 
     } 

爲了避免多個條件如何使動態其中,此條款?請找出這種解決方案..

+0

您可以創建一個像'公共靜態的IEnumerable WhereTest (這IEnumerable的,Func鍵...)'自己委託的擴展方法 – Lucas

回答

1

你可以只上標記多個Where條款

var filteredResult = _entity.MaterialMasters; 
if (!string.IsNullOrEmpty(manufacturer)) 

    filteredResult = filteredResult.Where(x => x.Manufacturer == manufacturer); 
} 
if (!string.IsNullOrEmpty(projectcode)) 

    filteredResult = filteredResult.Where(x => x.ProjectCode == projectcode); 
} 
if (!string.IsNullOrEmpty(part)) 

    filteredResult = filteredResult.Where(x => x.Part == part); 
} 

他們將累計工作,這意味着你可以提供1,2或參數3,你會得到適當的結果。

0
var filteredResult = 
       _entity.Where(
       ent => 
       (!string.IsNullOrEmpty(manufacturer) && ent.Manufacturer == manufacturer) 
       || (!string.IsNullOrEmpty(projectcode) && ent.ProjectCode == projectcode) 
       || (!string.IsNullOrEmpty(part) && ent.Part == part)); 

這將使您得到任何結果的製造商,projectCode和在一個地方的一部分。

2

他想擺脫if語句並將其全部寫爲linq查詢。我想你想是這樣的

.Where(
s => 
(string.IsNullOrEmpty(manufacturer) | (s.Manufacturer == manufacturer)) && 
(string.IsNullOrEmpty(projectcode) | (s.ProjectCode == projectcode)) && 
(string.IsNullOrEmpty(part) | (s.Part== part)) 
).ToList();