linq sql对数据库进行复杂查询
上一节,linq sql查询数据库实例中,LINQ查询表达式查询LinqDB数据库的UserInfo中的数据,且该查询中只涉及一个表(UserInfo),查询条件也相对简单。本小节介绍比较复杂的LINQ查询表达式,并在LINQ查询表达式使用join子句联接多个相关的表。
下面的实例代码使用LINQ to SQL查询LinqDB数据库中的UserInfo、UserRole和Role表中的数据,并在查询中使用join子句联接相关的表。具体步骤如下。
(1)创建LinqDBDataContext类的实例db。
(2)使用LINQ查询表达式查询UserInfo表中ID列的值小于10,且Username列的值的长度大于5的数据。其中,LINQ查询表达式为“from ur in db.UserRole join u in db.UserInfo on ur.UserID equals u.ID join r in db.Role on ur.RoleID equals r.ID where u.ID < 10 && u.Username.Length > 5 select new { Username = u.Username, RoleName = r.RoleName}”。
(3)在上述LINQ查询表达式中,使用“join u in db.UserInfo on ur.UserID equals u.ID”子句联接UserRole和UserInfo表,使用“join r in db.Role on ur.RoleID equals r.ID”子句联接UserRole和Role表。其中,UserInfo、UserRole和Role表之间的关系图如图所示。
(4)上述LINQ查询表达式的查询结果保存为result变量。其中,结果由UserInfo表的Username列的值和Role表的RoleName列的值组成。
(5)把result变量设置为GridView控件gvData的数据源,并绑定该控件的数据,显示查询结果。
private void ShowData() { ///创建LinqDB数据库的数据上下文的实例 LinqDBDataContext db = new LinqDBDataContext(LinqSystem.LinqDBConnectionString); ///获取所有角色 var result = from ur in db.UserRole ///联接UserInfo表 join u in db.UserInfo on ur.UserID equals u.ID ///联接Role表 join r in db.Role on ur.RoleID equals r.ID where u.ID < 10 && u.Username.Length > 5 select new { ///选择用户名称和角色 Username = u.Username, RoleName = r.RoleName }; ///绑定控件数据,并显示数据 gvData.DataSource = result; gvData.DataBind(); }
Sample_08项目中的ComplexQuery.aspx页面测试了上述实例代码(ShowData()函数),测试结果如图所示。
来源:http://blog.csdn.net/linqmail/article/details/2308532
加支付宝好友偷能量挖...