SqlSugar的Where用法
1、普通表达式查询
//id=@id var list=db.Queryable<Student>().Where(it => it.Id == id).ToList(); //多个条件 var list2=db.Queryable<Student>() .WhereIF(id>0,it => it.Id == id) // 如果id>0 添加条件 id=@id .WhereIF(name!= null ,it => it.name== "a" ) //如果 name !=null 添加条件 name='a' .ToList(); //id=@id or name like '%'+@name+'%' var list2 = db.Queryable<Student>().Where(it => it.Id == id||it.Name.Contains( "jack" )).ToList(); |
表达式: && 表示 and , || 表式 OR
2、根据SQL查询
//id=@id var list=db.Queryable<Student>().Where( "id=@id" , new { id=1}).ToList(); //id=@id or name like '%'+@name+'%' var list2 = db.Queryable<Student>().Where( "id=@id or name like '%'+@name+'%' " , new { id=1,name= "jack" }).ToList(); |
3、动态查询
[ { "FieldName" : "id" , "ConditionalType" : "0" , "FieldValue" : "1" }, { "FieldName" : "name" , "ConditionalType" : "0" , "FieldValue" : "jack" } ] //5.0.5.1 Json直接序列化 var conModels= db.Context.Utilities.JsonToConditionalModels(json) var student = db.Queryable<Student>().Where(conModels).ToList(); // id=1 and name=jack //手动构造 //var conModels = new List<IConditionalModel>(); //conModels.Add(new ConditionalModel{ FieldName = "id",ConditionalType=ConditionalType.Equal,FieldValue="1"}); //conModels.Add(new ConditionalModel{ FieldName = "name",ConditionalType=ConditionalType.Equal,FieldValue="jack"}) |
点击查看: https://www.donet5.com/Home/Doc?typeId=2314
4、动态拼表达式查询 ,拼拉姆达
//创建表达式 var exp= Expressionable.Create<Student>() .And(it=>it.Id==1) .Or(it =>it.Name.Contains( "jack" )) .ToExpression(); //注意 这一句 不能少 //使用表达式 var list=db.Queryable<Student>().Where(exp).ToList(); //多表查询 var exp=Expressionable.Create<T1,T2>() |
5、条件拼接查询
var query = db.Queryable<Student>().Where(it=>it.Id==1); if (条件) query.Where(it => it.Name == "jack" ); if (条件) query.Where(it => it.Id==1); int count=query.Clone().Count(); //当query用于2个地方的时候一定要加Clone这点和EF有本质区别 var list=query.Clone.ToList(); |
6、链式条件查询
var query = db.Queryable<Student>() .WhereIF(! string .IsNullOrEmpty(name), it => it.Name.Contains(name)) .WhereIF(id>0, it => it.Id==id).ToList(); |
7、根据Class查询,根据实查询
var getAll = db.Queryable<Order>().WhereClass( new Order() { Name= "a" },ignoreDefaultValue: true ).ToList(); //单个实体 var getAll = db.Queryable<Order>().WhereClass(List<Order>,ignoreDefaultValue: true ).ToList(); //支持集合 //ignoreDefaultValue=true 那么实体中的ID=0就不是条件,ID=1就会当作条件 //根据实体类查询 |
8、根据Class中主键查询
var getAll = db.Queryable<Order>().WhereClassByPrimaryKey( new Order() { Id=1 }).ToList(); //单个实体 var getAll = db.Queryable<Order>().WhereClassByPrimaryKey(List<Order>).ToList(); //支持集合 //根据实体类中的主键查询 |
9、根据字典查询
适合多字段批量过滤
var getAll=db . Queryable<Order>().WhereColumns(new List<Dictionary< string , object >>).ToList() |
10、查询函数
Where中使用SqlFunc函数
var list=db.Queryable<Order>().Where(it=>SqlFunc.DateIsSame(it.Time,DateTime.Now)).ToList() |
https://www.donet5.com/Home/Doc?typeId=1190
11、Where中有子查询
var list= db.Queryable<Student>() .Where(st=> SqlFunc.Subqueryable<School>().Where(sch=>sch.Id==st.SchoolId).Any()).ToList(); //更多用法看菜单:子查询 |
12、Where中用SQL
var list=db.Queryable<Student>().Where( "id=@id" , new {id=1}).ToList() |
13、字符串表达式
5.1.4.107-preview14+
//程序启动时配置 StaticConfig.DynamicExpressionParserType = typeof (DynamicExpressionParser); StaticConfig.DynamicExpressionParsingConfig = new ParsingConfig() //用到SqlFunc需要配置这个属性 { CustomTypeProvider = new SqlSugarTypeProvider() //最下面 }; //注意:第二个参数必须要有$ //参数化:可以缓存创建性能好 //如果没有$ 需要用 FormattableStringFactory.Create("it=>it.Id=={0}", 1) //导航属性动态 var list3 = db.Queryable<UnitPerson011>().Where( "it" , $ "it=>SqlFunc.Exists(it.Address.Id)" ).ToList(); //普通条件动态 var list4 = db.Queryable<UnitPerson011>().Where( "it" , $ "it=>it.Name=={" a "}" ).ToList(); //动态类+动态条件 var list5=db.QueryableByObject( typeof (UnitPerson011)).Where( "it" , $ "it=>it.Address.Id=={1}" ).ToList(); //扩展类型 public class SqlSugarTypeProvider : DefaultDynamicLinqCustomTypeProvider { public override HashSet<Type> GetCustomTypes() { var customTypes = base .GetCustomTypes(); customTypes.Add( typeof (SqlFunc)); //识别SqlFunc return customTypes; } } |