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; } } |