2011-11-22 86 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();