# Select
Sqless 支持以下几种 Select:
| 功能 | 说明 | 用法 | 
|---|---|---|
| Select 特定列表 | 使用泛型,获取列表 | Select<T>(SqlessSelectRequest) | 
| Select 普通列表 | 使用 dynamic | Select(SqlessSelectRequest) | 
| SelectFirst | 选择第一条,使用泛型,如果未找到就报错 | SelectFirst<T>(SqlessSelectRequest) | 
| SelectFirstOrDefault | 选择第一条,使用泛型,如果未找到返回默认值 | SelectFirst<T>(SqlessSelectRequest) | 
后续Select示例中,sqless对象为
var sqlConStr = "Data Source=127.0.0.1;Initial Catalog=StoreTest;User ID=sa;Password=123";
var sqlessConfig = SqlessConfig.GetAllowUnspecifiedConfig(sqlConStr);
using Sqless sqless = new Sqless(sqlessConfig);
1
2
3
2
3
# SqlessRequest
Select 使用SqlessRequest的派生类SqlessSelectRequest
- Orders 属性: 排序,可设置多个排序条件
- Fields 属性: 查询字段,可利用LoadFromType函数快速设置
- Joins 属性: 表连接,可连接多个表
- PageIndex 属性: 分页查询起始页,0 基
- PageSize 属性: 分页查询每页数量
- LoadFromType 函数: 将类型的字段添加到 Fields 列表中
# Select 特定列表
# 示例
var request = new SqlessSelectRequest()
{
    Table = Tables.Product
};
request.LoadFromType(typeof(Product));
List<Product> products =  await sqless.Select<Product>(request);
1
2
3
4
5
6
2
3
4
5
6
# Select 普通列表
与 Select 特定列表 类似
# 示例
var request = new SqlessSelectRequest()
{
    Table = Tables.Product
};
request.LoadFromType(typeof(Product));
List<dynamic> products =  await sqless.Select(request);
1
2
3
4
5
6
2
3
4
5
6
# SelectFirst
# 示例
var account = "123456";
var request = new SqlessSelectRequest
{
    Table = "User"
};
request.Fields.Add(new Query.SqlessField() { Field = "Uid" });
request.Queries.Add(new Query.SqlessQuery()
{
    Field = "Account",
    Type = Query.SqlessQueryType.Equal,
    Value = account
});
string uid = await sqless.SelectFirst<string>(request);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# SelectFirstOrDefault
与SelectFirst用法相同,至是如果未找到会返回默认值
# 示例
string uid = await sqless.SelectFirstOrDefault<string>(request);
1
# 分页查询
TIP
至少存在一个 Orders,分页查询才生效。
# 示例
查询结果为第 2 页(PageIndex是 0 基的), 2 条数据。即查询结果为第三条和第四条数据。
var request=new SqlessSelectRequest()
{
    Table = Tables.User,
    PageSize = 2,
    PageIndex = 1,
    Orders = new List<SqlessOrder>()
    {
        new SqlessOrder() { Field="Uid" }
    },
    Fields = new List<SqlessField>()
    {
        new SqlessField() {  Field="Uid"  },
        new SqlessField() {  Field="Name"  }
    }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Join
Sqless 支持以下几种 Join:
- LeftJoin:与 SQL 中的 LEFT JOIN 对应
- RightJoin:与 SQL 中的 RIGHT JOIN 对应
- InnerJoin:与 SQL 中的 INNER JOIN 对应
- FullJoin:与 SQL 中的 FULL JOIN 对应
TIP
连接查询时,如果两个表中的字段名相同,只能取其中一个字段
# 示例
User表左连接Order表,查询条件为 Phone 字段不为空,查询结果取User表的Name、Order表的Time2 个字段。
var request = new SqlessSelectRequest()
{
    Table = Tables.User,
    Queries = new List<SqlessQuery>()
    {
        new SqlessQuery()
        {
            Field="Phone",
            Table="User",
            Type=SqlessQueryType.NotNull
        }
    },
    Fields = new List<SqlessField>()
    {
        new SqlessField() {  Table=Tables.User, Field="Name"  },
        new SqlessField() {  Table=Tables.Order, Field="Time"  }
    },
    Joins = new List<SqlessJoin>()
    {
        new SqlessJoin()
        {
            LeftTable=Tables.User,
            LeftField="Uid",
            RightTable=Tables.Order,
            RightField="Uid"
        }
    }
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
