使用linq和下拉列表进行搜索

时间:2014-02-27 09:38:12

标签: asp.net linq drop-down-menu

我得到了大约5个类似于SortPerson() metod的看起来像linq querys。我正在尝试使用下拉列表开发搜索,用户可以从下拉列表中选择值,并从用户选择使用的一个或多个下拉列表中返回true值。

有没有更简单的方法来开发它?非常感谢帮助

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

    var documents = from d in data.tblDocuments
                    join sp in data.tblPersons on d.DocPerson equals sp.PersonId
                    select d;

    if (!String.IsNullOrEmpty(personId))
    {
        documents = documents.Where(c => c.DocPerson.Equals(personId));
    }

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

1 个答案:

答案 0 :(得分:0)

如果您仍然只选择一个表,我没有看到没有Where的加入点。

如果您希望在未选择Person的情况下显示所有文档,则无法创建更简单的方法。你可以写得更短,如:

var documents = 
  from d in data.tblDocuments
  join ...
  where String.IsNullOrEmpty(personId) || d.DocPerson equals personId
  select d;

因此您不需要单独的if声明。

如果您想使用5个下拉列表中的多个值并在单个查询中将它们用作条件,只需添加更多条件:

var personId = ddlPerson.SelectedValue;
var someValue = ddlSomeDDL.SelectedValue;
//3 more values from DDL

var documents = from d in data.tblDocuments
                join sp in data.tblPersons on d.DocPerson equals sp.PersonId
                where (String.IsNullOrEmpty(personId) || sp.PersonId equals personId)
                && (String.IsNullOrEmpty(someValue) || d.SomeColumn equals someValue)
                //3 more conditions
                select d;