LINQ TO SQL 中join
类别:编程学习 浏览量:1679
时间:2014-11-27 LINQ TO SQL 中join
LINQ TO SQL 中join一、LINQ to SQL中join的特点
1、包含join和on关键字,如果只有join没有on,会报语法错误。
2、外键关联时,用的是关键字equals,而不能像SQL一样用等号。
3、必须显示调用要显示的字段。即要出现select 字段,否则会报错。
二、LINQ to SQL中join实例
1、用join关联两张表
var q =
from c in db.Customers
join o in db.Orders on c.CustomerID
equals o.CustomerID into orders
select new
{
c.ContactName,
OrderCount = orders.Count()
};
生成SQL语句为:
SELECT [t0].[ContactName], (
SELECT COUNT(*)
FROM [dbo].[Orders] AS [t1]
WHERE [t0].[CustomerID] = [t1].[CustomerID]
) AS [OrderCount]
FROM [dbo].[Customers] AS [t0]
实例2
var p = from u in entities.Customers
where u.City=="London"
join n in entities.Orders on u.CustomerID
equals n.CustomerID
into order //具有相同的customerid的orders为一组到order中
select new
{
u.CustomerID,
order,
Count=order.Count()
};
对这种方法的说明:如果我们要使用这种方法来遍历所有的记录,可以这样写:
foreach (var m in p)
{
foreach (var mm in m.order)
Console.WriteLine(m.CustomerID + "" +
mm.OrderID + " " + mm.Customers.City);
}
2、左外部联接(Left Outer Join):通过使用DefaultIfEmpty() 获取左外部联接。
下例中,在雇员没有订单时,DefaultIfEmpty()方法返回null:
var q =
from e in db.Employees
join o in db.Orders on e equals o.Employee into ords
from o in ords.DefaultIfEmpty()
select new
{
e.FirstName,
e.LastName,
Order = o
};
3、多表联接
var q =
from c in db.Customers
join o in db.Orders on c.CustomerID
equals o.CustomerID into ords
join e in db.Employees on c.City
equals e.City into emps
select new
{
c.ContactName,
ords = ords.Count(),
emps = emps.Count()
};
生成的SQL语句
SELECT [t0].[ContactName], (
SELECT COUNT(*)
FROM [dbo].[Orders] AS [t1]
WHERE [t0].[CustomerID] = [t1].[CustomerID]
) AS [ords], (
SELECT COUNT(*)
FROM [dbo].[Employees] AS [t2]
WHERE [t0].[City] = [t2].[City]
) AS [emps]
FROM [dbo].[Customers] AS [t0]
4、join组合键过滤
var q =
from o in db.Orders
from p in db.Products
join d in db.OrderDetails
on new
{
o.OrderID,
p.ProductID
} equals
new
{
d.OrderID,
d.ProductID
}
into details
from d in details
select new
{
o.OrderID,
p.ProductID,
d.UnitPrice
};
5、join中显示如何构造一侧可为 null 而另一侧不可为 null 的联接
var q =
from o in db.Orders
join e in db.Employees
on o.EmployeeID equals
(int?)e.EmployeeID into emps
from e in emps
select new
{
o.OrderID,
e.FirstName
};
标签:LINQ
您可能感兴趣
- list使用linq排序
- Linq中的TakeWhile和SkipWhile
- linq distinct去重
- linq中延迟执行
- linq中AsEnumerable和AsQueryable的区别
- linq 数据类型转换
- linq xml 查询
- LINQ TO SQL 中join
- linq to sql 中Concat、Union、Intersect、Except
- LINQ中Aggregate的用法
- linq中let
- linq中group by
- linq中join用法
- linq 排序
- 如何查看linq生成的sql
- Linq操作Datable
- 周杰伦演唱会门票(周杰伦演唱会门票多少钱一张2023)
- 焕然一新 成都轨道集团官方网站改版上线(成都轨道集团官方网站改版上线)
- 成都轨道交通19号线二期全线电通(成都轨道交通19号线二期全线电通)
- 19号线二期全线电通 轨道交通项目最新进展来了(19号线二期全线电通)
- 涉及3条地铁线路 成都这4座轨道交通站点有新名字了(涉及3条地铁线路)
- 来了 成都轨道交通5条线路刷新 进度条(成都轨道交通5条线路刷新)
热门推荐
- css行框高度与lineheight(CSS中height和min-height的区别)
- dedecms怎么设置翻页(DEDECMS中获取无限栏目子分类的方法)
- isapi和cgi限制
- docker 默认内存(docker 运行指定内存的操作)
- apache错误编码代码(关于Apache默认编码错误 导致网站乱码的解决方案)
- 宝塔面板密码忘记了怎么解锁(宝塔面板忘记用户名密码怎么找回)
- css圆角边框设置教程(css效果之边框内圆角)
- idea怎么在tomcat部署项目(IDEA 配置Tomcat服务器和发布web项目的图文教程)
- 数据库负载均衡的原理(理解web服务器和数据库的负载均衡以及反向代理)
- javascript页面滚动窗口(javascript实现简单滚动窗口)