LINQ查询
对于一些简单查询场景,可以不需要写SQL,用 LINQ查询 代替。
使用场景
- 编辑界面
- 查看详情
- 填充列表框
注意事项
- 一个LINQ查询只支持一张表
- LINQ查询只是为了解决一些简单场景,复杂场景请使用 SQL查询
单表查询
public class OrderBLL : BaseBLL
{
/// <summary>
/// 时间范围查询,WHERE中包含二个字段过滤
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
/// <returns></returns>
public async Task<List<Order>> GetByTimeRange(DateTime start, DateTime end)
{
var query = from t in dbContext.Entity.Query<Order>()
where t.OrderDate >= start && t.OrderDate < end
select t;
return await query.ToListAsync();
}
}
主从表查询
/// <summary>
/// 演示多个查询,合并构造一个复杂对象
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public async Task<Order> GetById(int id)
{
// 查询单个Order实体对象
Order order = await (from x in dbContext.Entity.Query<Order>()
where x.OrderID == id
select x).ToSingleAsync();
if( order != null )
// 查询 OrderDetail 列表
order.Details = await (from x in dbContext.Entity.Query<OrderDetail>()
where x.OrderID == id
select x).ToListAsync();
return order;
}
查询部分字段
var quey = from x in dbContext.Entity.Query<Customer>()
where x.CustomerID == 100
// 注意下面这行代码,将只从数据库中查询二个字段
select new Customer { CustomerID = 0, CustomerName = "" };
Customer customer = await quey.ToSingleAsync();
说明:只需要在 select 子句中列出要查询的字段即可,上例就列出了2个字估。
IN查询
string b = "aaa";
string c = null;
int[] array = new int[] { 1, 2, 3, 4, 5 };
var query = from t in db.Entity.Query<Product>()
where (t.ProductID == _f5
|| array.Contains(t.CategoryID)
|| t.ProductName.StartsWith(b)
)
&& t.Remark != c
select t;
List<Product> list = query.ToList();
LIKE查询操作符
- 右模糊查找: StartWidth
- 全模糊查找: Contains