如果使用Linq,则使用string.IsNullOrEmpty隐藏连接

时间:2014-03-06 12:08:27

标签: linq

我得到了这个linq查询,它使用下拉列表在我的数据库中搜索选定的值。

有没有办法隐藏"加入"在linq查询中,如果ddlCategory为null?我想要这个,因为搜索结果显示重复行,因为我的文档可以有很多类别。希望你明白我的意思..任何人都可以帮忙吗?

var documents = from d in data.tblDocuments

            join sc in data.tblSubCategories on d.DocId equals sc.DocId
            orderby d.Docyear descending 

            where
                (string.IsNullOrEmpty(person) || d.DocPerson.Equals(person)) &&
                (string.IsNullOrEmpty(year) || d.Docyear.Equals(year)) &&
                (string.IsNullOrEmpty(law) || d.DocLaw.Equals(law)) &&
                (string.IsNullOrEmpty(court) || d.DocCourt.Equals(court)) &&
                (string.IsNullOrEmpty(category) || sc.CategoryId.Equals(category)) &&
                (string.IsNullOrEmpty(casenr) || d.DocNr.Equals(casenr))

            select d;

1 个答案:

答案 0 :(得分:0)

使用lambda语法:

var query = data.tblDocuments;

if (condition) // conditionally add join
   query = query.Join(data.tblSubCategories.Where(sc => sc.CategoryId == category), 
                      d => d.DocId, sc => sc.DocId, (d,sc) => d);

// continue to compose query
query = query.OrderByDescending(d => d.Docyear)
             .Where(d => ...);

顺便说一句,您可以根据条件进行过滤:

if (!String.IsNullOrEmpty(person))
    query = query.Where(d => d.DocPerson == person);
相关问题