您的位置:首页 > 其它

ALinq 入门学习(六)--Join 连接查询

2010-05-26 17:59 274 查看
简单介绍一下连接查询:通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。from join_table1 join_type join_table2 on Join_condition 这个是SQL 中最简单的连接查询功能语法。在ALinq , Linq ,Entity Framework 中都有涉及到连接查询,在某种程度上的确简便了很多查询。但是个人认为,Linq to SQL ,ALinq 使用Linq 语句来连接查询数据库不是那么的方便,总感觉有些地方不是Linq 语句所能处理的。本文章出略的讲解ALinq 中连接查询数据。

1. 一对多查询

在ORM映射框架中我们听得最多的也就是什么 1 to 1, 1 to many ,many to many 等等。这代表着一种数据结构之间的关系。一对多查询也就是查询主表的时候附带查询子表中的集合信息。在很多情况下不建议采用一对多查询,因为这样是比较消耗性能的。ALinq 一对多查询例子如下:

ALinq 双向连接查询 1 /// <summary>
2 /// 双向连接查询
3 /// </summary>
4 public void FunctionJionDouble()
5 {
6 OA_DBDataContext context = new OA_DBDataContext(new SqlConnection(connectionString));
7 context.Log = Console.Out;
8 var query = from r in context.TabRole
9 join u in context.TabUser
on r.Id equals u.RoleId into userlist
select new
{
r.RoleName,
userlist
};
foreach (var item in query)
{
Console.WriteLine("RoleName ==> "+item.RoleName);
foreach (var user in item.userlist)
{
Console.WriteLine("UserName ==> "+user.UserName);
}
Console.WriteLine();
}
}

补充介绍连接查询:

在SQL中连接查询分为三种情况:内连接、外连接和交叉连接

1.内连接

内连接又非为三种情况:等值连接、自然连接和不等连接

等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列

不等连接:在连接条件中使用 除 等于号之外的运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列

自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。这个与等值连接的区别就是重复列的问题。

2.外连接

外连接又分为: 左外连接,右外连接,全连接

左外连接,右外连接:返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外连接时)、右表(右外连接时)所有数行 。

全连接: 其实就是上面的组合情况,包含两张表中的所有数据。

3.交叉连接

交叉连接:不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数

上面的链接查询,都只是包含了很肤浅的介绍,文章主要目的还是介绍ALinq中Join关键字的一些简单用法。数据库的链接查询还必须查看具体的SQL官方资料。在使用Linq 语句的时候,我也不太喜欢这种方式的链接查询,感觉SQL语句的连接查询比Linq 语句的连接语句来的更为直接。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: