Asp.net mvc5 要怎么配合linq实现一个用户自定义组合多条件查询数据?

Asp.net mvc5 要怎么配合linq实现一个用户自定义组合多条件查询数据
后台查询接口真是这样的

if (keyWord.IsNullOrEmpty())
{
//先查出数据总数
totalCount = db.Queryable<SysClient>().Count();
return db.Queryable<SysClient, SysUser, SysCity, SysSource>((A, B, C, D) => new object[] {
                              JoinType.Left,B.Id == A.HomeImport,JoinType.Left,C.Id == A.CityId,JoinType.Left,D.Id == A.SourceId,JoinType.Left,B.Id == A.ECService,JoinType.Left,B.Id == A.Designer
                          }).OrderBy((A, B, C, D) => A.ModifyTime, OrderByType.Desc).Select((A, B, C, D) => new SysClient
                     {
                         Id = A.Id,
                         ClientName = A.ClientName,
                         ClientPhone = A.ClientPhone,
                         Property = A.Property,
                         Area = A.Area,
                         PropertyType = A.PropertyType,

                     }).ToPageList(pageIndex, pageSize);
                    }
                    totalCount = db.Queryable<SysClient>().Where(it => it.CityId.Contains(keyWord) || it.ClientName.Contains(keyWord)).Count();
                    return db.Queryable<SysClient, SysUser, SysCity, SysSource>((A, B, C, D) => new object[] {
                        JoinType.Left,B.Id == A.HomeImport,JoinType.Left,C.Id == A.CityId,JoinType.Left,D.Id == A.SourceId,JoinType.Left,B.Id == A.ECService,JoinType.Left,B.Id == A.Designer
                    }).Where((A, B, C, D) => A.Area.Contains(keyWord) || A.PropertyType.Contains(keyWord) || A.Property.Contains(keyWord) || A.ClientName.Contains(keyWord) || A.CreateTime.Contains(keyWord) || A.ClientPhone.Contains(keyWord)).OrderBy((A, B, C, D) => A.ModifyTime, OrderByType.Desc).Select((A, B, C, D) => new SysClient
                    {
                        Id = A.Id,
                        ClientName = A.ClientName,
                        ClientPhone = A.ClientPhone,
                        Property = A.Property,
                        Area = A.Area,
                        PropertyType = A.PropertyType,
                        ClientType = A.ClientType,
                        SourceId = A.SourceId,

                    }).ToPageList(pageIndex, pageSize);

这种方式只实现了定义好了的条件查询如果是用户自定义条件组合要怎么实现呢?

使用 dlinq
https://www.cnblogs.com/myzony/p/9143692.html
或者拼接linq
query = db.table;
if (...)
query = query.Where(条件1)
if (...)
query = query.Where(条件2)
相当于 条件1 and 条件2

if (...)
query = query.Where(条件1)
if (...)
query = query.Union(query.Where(条件2))
相当于 条件1 or 条件2
还可以用表达式树

问题解决的话,请点下采纳(包括之前的提问)