2011-11-22 163 views
4

我有十個字段的表。我需要在LINQ中進行搜索查詢。 我的領域是:使用查詢linq搜索空字段

名字(字符串),姓氏(字符串),FatherName(串),NotationId(INT),DebtPrice(INT),BRANCHNAME(串),DebtId(INT),MeliCode(串)

我的問題是:當用戶不補領域,這個領域不應該在查詢搜索使用
感謝。

收集Legal.View_Dossiers

+0

這些是隻有8場。我不明白 - 這是一個LINQ to SQL查詢嗎? LINQ到集合? – Aidan

+1

這是從LINQ到SQL – aya

回答

3

您可以使用此代碼:

var query = from d in datacontext.sample where 
          (TBoxFName.Text=="" || d.FirstName.Contains(TBoxFName.Text.Trim())) 
          &&(TBoxLName.Text == "" || d.LastName.Contains(TBoxLName.Text.Trim())) 
          &&(TBoxFatherName.Text == "" || d.FatherName.Contains(TBoxFatherName.Text.Trim())) 
          && (TBoxPriceDebt.Text == "" || d.DebtPrice.ToString().Contains(TBoxPriceDebt.Text.Trim())) 
          && (CBoxBranch.Text == "" || d.BranchName.Contains(CBoxBranch.Text.Trim())) 
          &&(TBoxDebt.Text == "" || d.DebtId.Contains(TBoxDebt.Text.Trim())) 
          &&(TBoxMeliCode.Text == "" || d.MeliCode.Contains(TBoxMeliCode.Text.Trim())) 
           select d; 
+0

爲什麼你要'TBoxFName.Text ==「」'???如果運行'd.FirstName.Contains(TBoxFName.Text.Trim())'並且'd.FirstName'具有值,則返回true。 –

+0

,因爲如果「TBoxFName.Text ==」「'then * firstname *」字段不是搜索查詢的因素。 – aya

+0

如果'TBoxFName.Text ==「」'爲空,那麼你的方法並非有用,那麼確定如果d.FirstName不爲null,則d.FirstName.Contains(TBoxFName.Text.Trim())'返回true,如果你想空檢查,你應該這樣做:'d.FirstName!= null && d.FirstName.Contains(TBoxFName.Text.Trim())'實際上按照你當前的方式,如果文本框有值並且輸入字符串是d.FirstName是空的,那麼你會得到一個異常。事實上,我確信你目前的方式並不能幫助OP。 –

2

認爲(目前還不清楚),你的意思是這樣:

IQueryable<YourType> query = /* some basic query; maybe db.TheTable */ 

if(!string.IsNullOrEmpty(firstName)) 
    query = query.Where(row => row.FirstName == firstName); 
if(!string.IsNullOrEmpty(lastName)) 
    query = query.Where(row => row.LastName == lastName); 
if(!string.IsNullOrEmpty(fatherName)) 
    query = query.Where(row => row.FatherName == fatherName); 
// etc 

var matches = query.Take(50).ToList(); 

這裏採用查詢組成發行最合適底層查詢可以;例如,如果這是LINQ到SQL和firstNamefatherName提供的,你會得到這樣的:

select top 50 {some columns} from [dbo].[TheTable] t 
where t.FirstName = @p0 and t.FatherName = @p1 

其中@p0@p1是抱着值的參數。

+0

坦克marc.problem是搜索查詢沒有'如果' – Mehrdad

+0

@Mehrdad請改說,我不能按照評論。然而,請注意,*查詢* **沒有**任何「if」 - 請參閱示例TSQL代碼I包含 –

+0

,其中參數'@ p0'和'@ p1' – Mehrdad

0

你可以嘗試寫:

IEnumerable<YourType> query = //data taken from database 
var queryWhere = query 
    .Where(x => x.FirstName == varFirstName || string.IsNullOrEmpty(x.FirstName)) 
    .Where(x => x.LastName == varLastName  || string.IsNullOrEmpty(x.LastName)) 
    .Where(x => x.FatherName == varFatherName || string.IsNullOrEmpty(x.FatherName)) 
    //...and so on... 
    .ToList();