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



支持的操作符范围

xx