var 子查询 = from c in ctx.Customers
                   where
                       (from o in ctx.Orders group o by o.CustomerID into o where o.Count() > 5 select o.Key).Contains(c.CustomerID)
                   select c;

  

in 操作

描述:查询指定城市中的客户

查询句法:

var in操作 = from c in ctx.Customers
                    wherenewstring[] { "Brandenburg", "Cowes", "Stavern" }.Contains(c.City)
                    select c;

 

Join

描述:内连接,没有分类的产品查询不到

查询句法:

var innerjoin = from p in ctx.Products
                        join c in ctx.Categories
                        on p.CategoryID equals c.CategoryID
                        select p.ProductName;

  

描述:外连接,没有分类的产品也能查询到

查询句法:

var leftjoin = from p in ctx.Products
                       join c in ctx.Categories
                       on p.CategoryID equals c.CategoryID
                       into pro
                       from x in pro.DefaultIfEmpty()
                       select p.ProductName;

  

 

var q = db.Customers.Where(p=>cities.Contains(p.City)).ToList();
语句描述:这个例子使用Contains查找其所在城市为西雅图、伦敦、巴黎或温哥华的客户。

总结一下这篇我们说明了以下语句:

Group By/Having    分组数据;延迟
Any    用于判断集合中是否有元素满足某一条件;不延迟
All    用于判断集合中所有元素是否都满足某一条件;不延迟
Contains    用于判断集合中是否包含有某一元素;不延迟






适用场景:统计数据吧,比如统计一些数据的个数,求和,最小值,最大值,平均数。

Count
说明:返回集合中的元素个数,返回INT类型;不延迟。生成SQL语句为:SELECT COUNT(*) FROM

1.简单形式:
得到数据库中客户的数量:

var q = db.Customers.Count();
2.带条件形式:
得到数据库中未断货产品的数量:

var q = db.Products.Count(p => !p.Discontinued);
LongCount
说明:返回集合中的元素个数,返回LONG类型;不延迟。对于元素个数较多的集合可视情况可以选用LongCount来统计元素个数,它返回long类型,比较精确。生成SQL语句为:SELECT COUNT_BIG(*) FROM

var q = db.Customers.LongCount();
Sum
说明:返回集合中数值类型元素之和,集合应为INT类型集合;不延迟。生成SQL语句为:SELECT SUM(…) FROM

1.简单形式:
得到所有订单的总运费:

var q = db.Orders.Select(o => o.Freight).Sum();
2.映射形式:
得到所有产品的订货总数:

var q = db.Products.Sum(p => p.UnitsOnOrder);
Min
说明:返回集合中元素的最小值;不延迟。生成SQL语句为:SELECT MIN(…) FROM

1.简单形式:
查找任意产品的最低单价:

var q = db.Products.Select(p => p.UnitPrice).Min();
2.映射形式:
查找任意订单的最低运费:

var q = db.Orders.Min(o => o.Freight);
3.元素:
查找每个类别中单价最低的产品:

var categories =
    from p in db.Products
    group p by p.CategoryID into g
    select new {
        CategoryID = g.Key,
        CheapestProducts =
            from p2 in g
            where p2.UnitPrice == g.Min(p3 => p3.UnitPrice)
            select p2
    };
Max
说明:返回集合中元素的最大值;不延迟。生成SQL语句为:SELECT MAX(…) FROM

1.简单形式:
查找任意雇员的最近雇用日期:

var q = db.Employees.Select(e => e.HireDate).Max();
2.映射形式:
查找任意产品的最大库存量:

var q = db.Products.Max(p => p.UnitsInStock);
3.元素:
查找每个类别中单价最高的产品:

var categories =
    from p in db.Products
    group p by p.CategoryID into g
    select new {
        g.Key,
        MostExpensiveProducts =
            from p2 in g
            where p2.UnitPrice == g.Max(p3 => p3.UnitPrice)
            select p2
    };
Average
说明:返回集合中的数值类型元素的平均值。集合应为数字类型集合,其返回值类型为double;不延迟。生成SQL语句为:SELECT AVG(…) FROM

1.简单形式:
得到所有订单的平均运费:

var q = db.Orders.Select(o => o.Freight).Average();
2.映射形式:
得到所有产品的平均单价:

var q = db.Products.Average(p => p.UnitPrice);
3.元素:
查找每个类别中单价高于该类别平均单价的产品:

var categories =
    from p in db.Products
    group p by p.CategoryID into g
    select new {
        g.Key, 
        ExpensiveProducts =
            from p2 in g
            where p2.UnitPrice > g.Average(p3 => p3.UnitPrice)
            select p2
    };

相关文章: