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<stringobject>>).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;
            }
        }
         
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章