2014-02-24 125 views
0

我得到了这2个linq查询。有没有简单的方法来合并这两个查询。所以,当我使用我的下拉列表,我可以得到一个结果,如果两者都返回true?合并linq结果

public void CategorySort() 
{ 
    var categoryId = int.Parse(ddlCat.SelectedValue); 

    var data = new MyModelContext(); 

    var cat = from c in data.tblDocuments 
       join sc in data.tblSubCategories on c.DocId equals sc.DocId 
       where sc.CategoryId == categoryId 
       select c; 

    rptResult.DataSource = cat.ToList(); 
    rptResult.DataBind(); 
} 

public void SortPerson() 
{ 
    var personId = int.Parse(ddlPerson.SelectedValue); 
    var data = new MyModelContext(); 


    var documents = from d in data.tblDocuments 
        join sp in data.tblSubPersons on d.DocId equals sp.DocId 
        where sp.PersonId == personId 
        select d; 

    rptResult.DataSource = documents.ToList(); 
    rptResult.DataBind(); 

} 
+0

是这个EntityFramework?如果是这样,什么版本? –

+0

到目前为止还没有使用过实体 –

+0

如果一个条件匹配但是另一个不匹配,你想做什么?如果两个值均为真,则为 –

回答

0

这是一个简单的例子,说明如何找到一个文件,它可以被类别或者子类匹配。

var cat = from c in data.tblDocuments 
      join sc in data.tblSubCategories on c.DocId equals sc.DocId 
      join sp in data.tblSubPersons on c.DocId equals sp.DocId 
      where sc.CategoryId == categoryId || sp.PersonId == personId 
      select c; //This needs to change to be what you want to select 
+0

这个工作,如果我会说ddlCat是空的,ddlPerson有一个选定的值? –

+0

不会'int.parse(...)'如果列表为空则失败? –

1

加入到两者中并使用&&运算符来检查两个子记录。

var cat = from c in data.tblDocuments 
      join sc in data.tblSubCategories on c.DocId equals sc.DocId 
      join sp in data.tblSubPersons on d.DocId equals sp.DocId 
      where sc.CategoryId == categoryId && sp.PersonId == personId 
      select c; 
+0

这个工作,如果我会说ddlCat是空的,ddlPerson有一个选定的值? –

+1

不需要。如果你想让这个需求的每个表达式为'(categoryId == null || sc.CategoryId == categoryId)&& ...'。然而,在这之前'int.Parse'会失败,所以你需要把它排除。 –