精通LINQ --8.1.2 复杂查询

    8.1.1小节使用简单的LINQ查询表达式查询LinqDB数据库的UserInfo中的数据,且该查询中只涉及一个表(UserInfo),查询条件也相对简单。本小节介绍比较复杂的LINQ查询表达式,并在LINQ查询表达式使用join子句联接多个相关的表。

下面的实例代码使用LINQ to SQL查询LinqDB数据库中的UserInfoUserRoleRole表中的数据,并在查询中使用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”子句联接UserRoleUserInfo表,使用“join r in db.Role on ur.RoleID equals r.ID”子句联接UserRoleRole表。其中,UserInfoUserRoleRole表之间的关系图如图所示。

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()函数),测试结果如图所示。

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值