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
还可以用表达式树