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

加支付宝好友偷能量挖...


评论(0)网络
阅读(109)喜欢(0)asp.net-linq