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;
}
}
|
标签:Queryable,ToList,db,用法,var,Where,id,SqlSugar From: https://www.cnblogs.com/yswenli/p/17967726